线程创建的方式

------------恢复内容开始------------

程序运行起来就产生了进程  一个进程有多个线程 

java默认有main线程(用户线程) gc线程(守护线程)

三种创建方式

  1. 继承thread类 -- 实现了Runnable接口
  2. 实现Runnable接口 
  3. 实现callable接口
 1 //创建线程的方式1:继承Thread类,重写run()方法,调用start()开启线程
 2 
 3 //线程开启不一定立即执行由cpu调度执行
 4 public class TestThread extends Thread {
 5     @Override
 6     public void run() {
 7         //run方法线程体
 8         for (int i = 0; i < 200; i++) {
 9             System.out.println("run方法----"+i);
10         }
11     }
12 
13     public static void main(String[] args) {
14         //main方法主线程
15 
16         //创建线程对象
17         TestThread testThread1 =new TestThread();
18 
19         //调用start()方法
20         testThread1.start();
21 
22         for (int i = 0; i < 1000; i++) {
23             System.out.println("main方法======"+i);
24         }
25     }
26 }

 

 1 //创建线程的方式2: 是西安Runnable接口,重写run()方法,执行线程需要先丢入runnable接口实现类,调用start()方法
 2 public class TestThread03 implements Runnable {
 3     @Override
 4     public void run() {
 5         //run方法线程体
 6         for (int i = 0; i < 200; i++) {
 7             System.out.println("run方法----"+i);
 8         }
 9     }
10 
11     public static void main(String[] args) {
12         //main方法主线程
13 
14         //创建Runnable接口的实现类对象
15         TestThread03 testThread03 =new TestThread03();
16         //创建线程对象,通过线程对象开启线程
17         Thread thread = new Thread(testThread03);
18         //调用start()方法
19         thread.start();
20 //        new Thread(testThread03).start();---简写
21 
22 
23         for (int i = 0; i < 1000; i++) {
24             System.out.println("main方法======"+i);
25         }
26     }
27 }
 1 //创建线程的方式3: 实现Callable接口
 2 public class TestThread05 implements Callable<Boolean> {
 3     private String name;
 4     TestThread05(String name){
 5         this.name = name;
 6     }
 7     @Override
 8     public Boolean call() {
 9         for (int i = 0; i < 1000; i++) {
10             if (i == 999) {
11                 System.out.println(name + "完成");
12             }
13         }
14         return true;
15     }
16     public static void main(String[] args) throws ExecutionException, InterruptedException {
17         TestThread05 t1 = new TestThread05("老大");
18         TestThread05 t2 = new TestThread05("老二");
19         TestThread05 t3 = new TestThread05("老三");
20         //创建执行服务
21         ExecutorService ser = Executors.newCachedThreadPool();
22         //提交执行
23         Future<Boolean> r1 = ser.submit(t1);
24         Future<Boolean> r2 = ser.submit(t2);
25         Future<Boolean> r3 = ser.submit(t3);
26         //获取结果
27         boolean rs1 = r1.get();
28         boolean rs2 = r2.get();
29         boolean rs3 = r3.get();
30         //关闭服务
31         ser.shutdown();
32     }
33 }

 

 1 //多个线程同时操作一个对象    ----买火车票
 2  2 public class TestThread04 implements Runnable {
 3  3 
 4  4     private int ticketNumber = 10;
 5  5 
 6  6     @Override
 7  7     public void run() {
 8  8 
 9  9         while (true) {
10 10             if (ticketNumber <= 0) break;
11 11 
12 12             System.out.println(Thread.currentThread().getName() + "拿到了第" + ticketNumber-- + "张票");
13 13         }
14 14     }
15 15 
16 16     public static void main(String[] args) {
17 17         //main方法主线程
18 18 
19 19         //创建Runnable接口的实现类对象
20 20         TestThread04 testThread04 = new TestThread04();
21 21         new Thread(testThread04, "老大").start();
22 22         new Thread(testThread04, "老二").start();
23 23         new Thread(testThread04, "老三").start();
24 24     }
25 25 }

 

posted @ 2020-09-11 18:50  野兽Gentleman  阅读(249)  评论(0编辑  收藏  举报