线程学习一:创建线程

线程创建有两个方法:

  • 创建Thread或者其子类
  • 执行start()方法

创建线程的方法也有两个:

一、实现Runnable接口的run方法

 1 public class ThreadTest implements Runnable {
 2 
 3     @Override
 4     public void run() {
 5         for (int i = 0; i < 100; i++)
 6             System.out.println(Thread.currentThread().getName() + "........"+i);
 7 
 8     }
 9 
10     public static void main(String[] args) {
11         ThreadTest aa = new ThreadTest();
12         ThreadTest bb = new ThreadTest();
13         Thread t1 = new Thread(aa);
14         Thread t2 = new Thread(bb);
15         t1.start();
16         t2.start();
17         
18 
19     }
20 
21 }

二、继承Thread类重写run方法

 1 public class ThreadExtendsTest extends Thread { 
 2 
 3     ThreadExtendsTest(String name) {
 4         super(name);
 5     }
 6 
 7     @Override
 8     public void run() {
 9         for (int i = 0; i < 100; i++) {
10             System.out.println(this.getName() + "..." + i);
11         }
12     }
13 
14     public static void main(String[] args) {
15         ThreadExtendsTest aa = new ThreadExtendsTest("aa");
16         ThreadExtendsTest bb = new ThreadExtendsTest("bb");
17         aa.start();
18         bb.start();
19     }
20 
21 }

其它:多个线程共享同一份资源

 1 public class ThreadTest implements Runnable {
 2     private int count = 300;
 3 
 4     @Override
 5     public void run() {
 6         for (int i = 0; i < 100; i++)
 7             System.out.println(Thread.currentThread().getName() + "........" + count--);
 8     }
 9 
10     public static void main(String[] args) {
11         ThreadTest aa = new ThreadTest();
12         Thread t1 = new Thread(aa);
13         Thread t2 = new Thread(aa);
14         Thread t3 = new Thread(aa);
15         t1.start();
16         t2.start();
17         t3.start();
18 
19     }
20 
21 }

注意:

  • 两个线程的执行时间并不是平均分配的,而是根据JVM调度的。
  • Thread类中有带线程名值的创建方法,而且如果不创建名字,系统也会自动生成线程名称。
  • 当两个线程都执行start()方法之后,同时在跑的有三个线程,当两个副线程的run()方法执行完毕以后,结束线程并且只剩下一个主线程。
原文地址:https://www.cnblogs.com/gforce/p/5894184.html