一、线程创建步骤
---------------------------------------
1.新建线程类,继承Thread
2.在新建的类中,重写run()方法作为分线程的主体
3.在主函数中new 线程类
4.调用start方法,开启线程。注意不是run方法开启线程
二、守护线程setDaemon
----------------------------------------
1.守护线程:同正常线程一样,只不过它会在所有非守护线程结束之后,强制自动结束。
2.可以 设置线程是否为守护线程setDaemon(true);
3.可以在线程的构造函数中设置为守护线程,这样新建的线程都是守护线程
4.当程序仅剩守护线程的时候,也意味着程序结束
5.语法:xxx.setDaemon(true/false);
三、阻塞主线程join
-----------------------------------------------
1.线程对象调用join()方法,会阻塞主线程,但不会阻塞其他分线程。
2.主线程见到join会一直等待join结束,再执行join之后的代码
3.语法:xxx.join();
四、线程休眠sleep
------------------------------------------------
1.静态方法,语法:Thread.sleep(ms);
2.表示让当前线程休眠 xx ms,在休眠期间放弃cpu资源的抢占
3.休眠时间结束,自动唤醒,开始抢占cpu资源
代码示例:
public class Day09 { public static void main(String[] args) { // 1.新建线程 // 可以在构造函数里进行守护线程的设置 MyThread p1 = new MyThread("11", 11111); MyThread p2 = new MyThread("22", 22222); MyThread p3 = new MyThread("33", 333); MyThread p4 = new MyThread("44", 4444); // 2,开启线程 // 注意这里使用的是start();而不是run(); p1.start(); p2.start(); p3.start(); p4.start(); // 3,阻塞主线程,等分线程执行完毕再去执行主线程 // join的作用是阻塞主线程,但仅仅是阻塞主线程,不会阻塞其他分线程 try { p1.join(); System.out.println("111~~"); p2.join(); System.out.println("222~~"); p3.join(); System.out.println("333~~"); p4.join(); System.out.println("444~~"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("比赛开始~~"); Room r = new Room("10", 10000); Timer t = new Timer(); // 4.设置守护线程:当所有非守护线程都结束之后,守护线程自动结束 // 当程序仅剩守护线程的时候,也意味着程序结束 t.setDaemon(true); r.start(); t.start(); } } class Room extends Thread { private String num; public int time; public Room(String num, int time) { this.num = num; this.time = time; } public void run() { System.out.println(num + "房间顾客正在唱歌~~~"); try { Thread.sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(num + "房间顾客走了,计时结束~!"); } } class Timer extends Thread { private int count = 0; public Timer() { // 设置为守护线程 this.setDaemon(true); } public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("计时:" + ++count); } } } class MyThread extends Thread { private String name; private int time; public MyThread(String name, int time) { this.name = name; this.time = time; } public void run() { System.out.println("玩家" + name + "正在路上"); try { Thread.sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("玩家" + name + "到了~~"); } }
全文完!