线程控制
方法名 | 说明 |
---|---|
static void sleep(long millis); | 当前正在执行的线程停留(暂停运行)指定的毫秒数 |
void join(); | void join(); 等待这个线程死亡 |
void setDaemon(boolean on); | 将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机退出 |
以图文和代码内容形式讲解
图文:
void setDaemon(boolean on)的使用
- 将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机退出,(守护线程不能放到其他运行线程的后边,否则默认不执行)
- ThreadDaemonDemo类
package Demo;
/*
在三国中,刘关张曾桃园结义立下毒誓,所以刘挂了,那么关和张也会挂,但是关和张之间还会挣扎下再挂
*/
public class ThreadDaemonDemo {
public static void main(String[] args) {
//建立线程,并赋予名字
ThreadDaemon td2 = new ThreadDaemon("关羽");
ThreadDaemon td3 = new ThreadDaemon();
td3.setName("张飞");
//设置主线程为刘备
Thread.currentThread().setName("刘备");
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + i + "号");//注意
}
//设置守护线程 void setDaemon(boolean on); 将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机退出
td2.setDaemon(true);
td3.setDaemon(true);
//启动线程
td2.start();
td3.start();
}
}
- ThreadDaemon类
package Demo;
public class ThreadDaemon extends Thread {
public ThreadDaemon() {
}
public ThreadDaemon(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + i + "号");
}
}
}
输出的内容:
void join()的使用
- 等待这个线程死亡,在不同时间片下优先让该先线程执行死亡后,则执行别的
- ThreadJoinDemo类
package Demo;
/*
线程控制
方法名 说明
void join(); 等待这个线程死亡,在不同时间片下优先让该先线程执行死亡后,则执行别的
比如:争夺皇位
康熙,八阿哥,四阿哥之间,但是肯定等到康熙挂了,这两才能争夺王位
*/
public class ThreadJoinDemo {
public static void main(String[] args){
//建立线程,并赋予名字
ThreadJoin tj = new ThreadJoin("康熙");
ThreadJoin tj1 = new ThreadJoin("八阿哥");
ThreadJoin tj2 = new ThreadJoin();
tj2.setName("四阿哥");
//启动线程
tj.start();
//void join(); 等待这个线程死亡
try {
tj.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//当人类进程执行完毕后,再是下一个进程的开始 注意:他们的时间片还是一样,占有CPU效率还是一样
tj1.start();
tj2.start();
}
}
- ThreadJoin类
package Demo;
public class ThreadJoin extends Thread {
public ThreadJoin() {
}
public ThreadJoin(String name) {
super(name);
}
@Override
public void run() {
for (int i=0;i<100;i++){
System.out.println(getName()+ i + "号" );
}
}
}
输出的内容:
static void sleep(long millis)的使用
- 使当前正在执行的线程停留(暂停运行)指定的毫秒数(sleep并不能让他们交替执行,如果sleep时间短,会连续,只能同时执行,只是每隔1000毫秒执行一次)
- ThreadSleepDemo类
package Demo;
/*
线程控制
方法名 说明
static void sleep(long millis); 使当前正在执行的线程停留(暂停运行)指定的毫秒数
sleep并不能让他们交替执行,如果sleep时间短,会连续,只能同时执行,只是每隔1000毫秒执行一次
用三国演义例子来讲:
曹操,刘备,孙权
*/
public class ThreadSleepDemo{
public static void main(String[] args) {
//建立ThreadSleepDemo线程,并利用有参构造进行赋值
ThreadSleep ts = new ThreadSleep("曹操");
ThreadSleep ts2 = new ThreadSleep("刘备");
ThreadSleep ts3 = new ThreadSleep("孙权");
//启动线程
ts.start();
ts2.start();
ts3.start();
}
}
- ThreadSleep类
package Demo;
public class ThreadSleep extends Thread {
public ThreadSleep() {
}
public ThreadSleep(String name) {
super(name);
}
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName()+":"+i);
try {
Thread.sleep(1000);//每个1000毫秒再出来
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
输出的内容: