线程休眠
public static void sleep(long millis)
public class ThreadSleep extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x + ",日期:" + new Date());
// 睡眠
// 困了,我稍微休息1秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
线程加入
public final void join()
等待该线程终止。
也就是说,得等这个线程运行结束,别的线程才能运行
public class ThreadJoinDemo {
public static void main(String[] args) {
ThreadJoin tj1 = new ThreadJoin();
ThreadJoin tj2 = new ThreadJoin();
ThreadJoin tj3 = new ThreadJoin();
tj1.setName("李渊");
tj2.setName("李世民");
tj3.setName("李元霸");
tj1.start();
try {
tj1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
tj2.start();
tj3.start();
}
}
线程礼让
public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。
public class ThreadYield extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
Thread.yield();
}
}
}
守护线程
public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。
当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
通俗易懂地说:守护线程是用来保护别的非守护线程的,如果其它非守护线程都停止了,守护线程自身也必须停止
(保护的人挂了,守护者也得挂,不过守护者得到消息再挂,所以受保护者挂了以后,守护者会继续执行几次再挂)
//这个代码中,刘备一运行完毕,张飞关羽跟着再运行几次,就停止
public class ThreadDaemonDemo {
public static void main(String[] args) {
ThreadDaemon td1 = new ThreadDaemon();
ThreadDaemon td2 = new ThreadDaemon();
td1.setName("关羽");
td2.setName("张飞");
// 设置守护线程
td1.setDaemon(true);
td2.setDaemon(true);
td1.start();
td2.start();
Thread.currentThread().setName("刘备");
for (int x = 0; x < 5; x++) {
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
中断线程
public final void stop():让线程停止,过时了,但是还可以使用。
替代stop的:
public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。
public class ThreadStop extends Thread {
@Override
public void run() {
System.out.println("开始执行:" + new Date());
// 我要休息10秒钟,亲,不要打扰我哦
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// e.printStackTrace();
System.out.println("线程被终止了");
}
System.out.println("结束执行:" + new Date());
}
}
public class ThreadStopDemo {
public static void main(String[] args) {
ThreadStop ts = new ThreadStop();
try {
Thread.sleep(3000);
// ts.stop(); //过了3秒后,关闭ThreadStop线程,
ts.interrupt(); //中断线程。 把线程的状态终止,并抛出一个InterruptedException
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}