守护线程
- 简称:备胎线程,属于Thread类,在别的线程执行完毕之后就会慢慢停止执行,垃圾回收机制就用到了类似守护线程,具体点击----->>>守护线程
- 调用
setDaemon(true)
实体类:
package com.itjh.pojo;
public class MyTread2 extends Thread {
public MyTread2(){}
//为让测试类可以直接给当前子线程起名字
public MyTread2(String name){
super(name);
}
@Override
public void run() {
for (int i = 0; i < 500; i++) {
System.out.println(getName()+"。。子线程==。。。"+i);
}
}
}
测试类:
package com.itjh.Test;
import com.itjh.pojo.MyTread2;
public class TestMyT2 {
public static void main(String[] args) {
MyTread2 myTread1=new MyTread2("小飞机");
MyTread2 myTread2=new MyTread2("小赤佬");
//守护线程指定你当备胎啦,小东西
myTread2.setDaemon(true);
myTread1.start();
myTread2.start();
}
}
结果:明显看出小飞机线程弄完后,小赤佬线程也慢慢的结束了,只是因为CPU跑得比较快,所以小赤佬无法立即停止下来
小飞机。。子线程==。。。498
小飞机。。子线程==。。。499
小赤佬。。子线程==。。。259
小赤佬。。子线程==。。。260
小赤佬。。子线程==。。。261
小赤佬。。子线程==。。。262
小赤佬。。子线程==。。。263
小赤佬。。子线程==。。。264
小赤佬。。子线程==。。。265
小赤佬。。子线程==。。。266
小赤佬。。子线程==。。。267
小赤佬。。子线程==。。。268
小赤佬。。子线程==。。。269
小赤佬。。子线程==。。。270
小赤佬。。子线程==。。。271
Process finished with exit code 0
礼让线程
- 孔融线程(属于Thread类):礼让他人,美好品德,我拿50个梨子,每次都让你先拿
- 调用
yield()
方法
实体类(小飞机线程): 添加个yield();
就可
package com.itjh.pojo;
public class MyTread2 extends Thread {
public MyTread2(){}
public MyTread2(String name){
super(name);
}
@Override
public void run() {
for (int i = 0; i < 50; i++) {
yield();
System.out.println(getName()+"。。子线程==。。。"+i);
}
}
}
实体类(小赤佬线程):
package com.itjh.pojo;
public class MyTread21 extends Thread{
public MyTread21(){
}
public MyTread21(String name){
super(name);
}
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println(getName()+"。。线子程。。。。。");
}
}
}
测试类:
package com.itjh.Test;
import com.itjh.pojo.MyTread2;
public class TestMyT2 {
public static void main(String[] args) {
MyTread2 myTread1=new MyTread2("小飞机");
MyTread2 myTread2=new MyTread2("小赤佬");
myTread1.start();
myTread2.start();
}
}
结果;小飞机尽量会礼让小赤佬
小飞机。。子线程==。。。0
小飞机。。子线程==。。。1
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
插入线程
让插入的线程先执行
把上面的测试类变一下即:在其中添加join()
方法,注意此方法应当在插入线程的.start()
之后
package com.itjh.Test;
import com.itjh.pojo.MyTread2;
import com.itjh.pojo.MyTread21;
public class TestMyT2 {
public static void main(String[] args) throws InterruptedException {
MyTread2 myTread1=new MyTread2("小飞机");
MyTread21 myTread2= new MyTread21("小赤佬");
myTread1.start();
myTread1.join();
myTread2.start();
}
}
结果:确实是小飞机先执行完毕,再执行小赤佬
小飞机。。子线程==。。。197
小飞机。。子线程==。。。198
小飞机。。子线程==。。。199
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。
小赤佬。。线子程。。。。。