线程创建的方式
------------恢复内容开始------------
程序运行起来就产生了进程 一个进程有多个线程
java默认有main线程(用户线程) gc线程(守护线程)
三种创建方式
- 继承thread类 -- 实现了Runnable接口
- 实现Runnable接口
- 实现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 }