1.public final void setDaemon(boolean on)
将此线程标记为daemon线程或用户线程。
当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。
线程启动前必须调用此方法。
例子 1:(Daemon)
public class Demo_Daemon {
public static void main(String[] args) {
Thread t1=new Thread() {
public void run() {
for(int i=0;i<10;i++) {
System.out.println(getName()+"-----"+i+“aaaaaaaa”);
}
}
};
Thread t2=new Thread() {
public void run() {
for(int i=0;i<10000;i++) {
System.out.println(getName()+"--------"+“bbbbbbbbb”);
}
}
};
t2.setDaemon(true);
// 将t2设置为守护线程,t2则变成守护线程
// t1则变成非守护线程,非守护线程相当于主人
// 守护线程相当于仆人,非守护线程(主人)一旦执行完,守护线程也要跟着结束
t1.start();
t2.start();
}
}
2.public final void join()
暂停当前线程,等待指定的线程执行结束后,当前线程再继续
public class Demo_join {
public static void main(String[] args) {
Thread t1=new Thread() {
public void run() {
for(int i=0;i<1000;i++) {
System.out.println(getName()+"----------"+i+"bbbbb");
}
}
};
Thread t2=new Thread() {
public void run() {
for(int i=0;i<10;i++) {
System.out.println(getName()+"--------"+i+"aaaaaaaaa");
if(i==2) {
try {
// t1.join();//当i=2的时候,暂停t2,去执行t1,直到t1线程死亡后再回来执行t2
t1.join(10);//当i=2时,暂停t2,跳转到t1,,让t1执行10毫秒,然后再跳回t2,继续执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t1.start();
t2.start();
}
}
3.public static void sleep(long millis)线程休眠
使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)
public class Demo_Sleep {
public static void main(String[] args) {
demo1();
}
public static void demo1() {
System.out.println("睡觉五秒钟");
new Thread() {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("醒了");
}
}.start();
}
//计时
public static void demo2() {
new Thread() {
public void run() {
for(int i=1;i<=10;i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
//倒计时
public static void demo3() {
new Thread() {
public void run() {
for(int i=10;i>0;i--) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
4.public static void yield() 线程礼让
线程礼让后不一定是执行其他执行线程,而是重新随机执行,有可能执行刚礼让的线程
public class Demo_Yield {
public static void main(String[] args) {
new Thread("A线程") {
public void run() {
for(int i=0;i<2000;i++) {
System.out.println(getName()+"-------"+i+"aaaaaaaaa");
if(i==100) {
System.out.println("A线程礼让");
Thread.yield();
//当i=100时,调用yield进行礼让,cpu空出来,然后重新随机执行线程A或者线程B
}
}
}
}.start();
new Thread("B线程") {
public void run() {
for(int i=0;i<2000;i++) {
System.out.println(getName()+"-------"+i+"bbbbb");
if(i==100) {
System.out.println("B线程礼让");
}
}
}
}.start();
}
}