码迷,mamicode.com
首页 > 编程语言 > 详细

多线程-4

时间:2017-06-08 01:22:26      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:sleep   cat   控制   join   lis   dex   end   虚拟机   sys   

四、sleep 休眠、yield 礼让、join 加入、Daemon 后台(守护)、stop(过时)或interrupt 终止

1.线程的控制(常见方法)
A:休眠线程,使线程休眠millis时间后再次进入就绪状态,等待运行。
sleep(long millis) throws InterruptedException
B:加入线程,有个很好的例子是父与子,一定是现有父亲才有儿子,父线程运行完以后才会运行子线程。父线程在start方法之后调用 join() 方法。
public final void join():等待该线程终止。
C:礼让线程,期望达到线程轮流运行的效果时使用,不是百分百达到。
public static void yield():暂停当前正在执行的线程对象,并执行其他线程。
让多个线程的执行更和谐,但是不能靠它保证一人一次。
D:后台线程,守护线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。
E:终止线程(掌握),使用stop之后后续代码不会运行;使用interrupt会以异常抛出的方式对超时的线程进行处理。
public final void stop():让线程停止,过时了,但是还可以使用。
public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。

2.实例代码
A.休眠线程实例代码:
public class Thread4 extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("线程 : " + getName() + "=" + i);
}

//sleep(long millis) throws InterruptedException 休眠
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

B:加入线程,有个很好的例子是父与子,一定是现有父亲才有儿子,父线程运行完以后才会运行子线程。父线程在start方法之后调用 join() 方法。
public class ThreadTest4 {
public static void main(String[] args) {
Thread4 th1 = new Thread4();
Thread4 th2 = new Thread4();
Thread4 th3 = new Thread4();

th1.setName("李源");
th2.setName("李世民");
th3.setName("李元吉");

//先有父才有子
th1.start();
//public final void join():等待该线程终止。
try {
th1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

th2.start();
th3.start();


}
}

C:礼让线程,期望达到线程轮流运行的效果时使用,不是百分百达到。
public class Thread4 extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("线程 : " + getName() + "=" + i);
}

// * public static void yield():暂停当前正在执行的线程对象,并执行其他线程。
// * 让多个线程的执行更和谐,但是不能靠它保证一人一次。
Thread.yield();
}
}

D:后台线程,守护线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。如果游戏,boss死掉以后剩下的小怪也会跟着一起死掉。大部分时候守护线程死掉需要些时间,所以可以看到只有守护线程的时候,守护线程会运行一段时间。
public class DeamonTEST {
public static void main(String[] args) {
Thread4 th1 = new Thread4();
Thread4 th2 = new Thread4();

th1.setName("张飞");
th2.setName("关羽");

//设置为守护线程
// * public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。
// * 当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
th1.setDaemon(true);
th2.setDaemon(true);

th1.start();
th2.start();

Thread.currentThread().setName("刘备");

//主死臣随,如游戏
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "----------");
}
}
}

E:终止线程(掌握),使用stop之后后续代码不会运行;使用interrupt会以异常抛出的方式对超时的线程进行处理。
public class StopThread extends Thread {
@Override
public void run() {
System.out.println("线程开始" + new Date());

try {
Thread.sleep(2000);

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("线程被终止!");
}

System.out.println("线程结束" + new Date());
}
}

public static void main(String[] args) {
StopThread st = new StopThread();
st.start();
try {
Thread.sleep(1000);
st.stop();
// st.interrupt();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


System.out.println("有没有");
}
}

多线程-4

标签:sleep   cat   控制   join   lis   dex   end   虚拟机   sys   

原文地址:http://www.cnblogs.com/yimimiyi/p/6959774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!