一、线程创建步骤
---------------------------------------
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 + "到了~~");
}
}
全文完!