JAVA中如何控制线程的启动与暂停

 我来答
andy0566
2011-05-24 · TA获得超过4437个赞
知道小有建树答主
回答量:1099
采纳率:75%
帮助的人:307万
展开全部
线程的状态表示线程正在进行的活动以及在此时间段内所能完成的任务.线程有创建,可运行,运行中,阻塞,死亡五中状态.一个具有生命的线程,总是处于这五种状态之一:
1.创建状态
使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)
2.可运行状态
使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)
3.运行中状态
Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.
4.阻塞状态
一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked)
5.死亡状态
线程结束后是死亡状态(Dead)

创建线程和启动线程并不相同,在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。这可以让您控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。

通常在构造器中通过start()启动线程并不是好主意。这样做,会把部分构造的对象暴露给新的线程。如果对象拥有一个线程,那么它应该提供一个启动该线程的start()或init()方法,而不是从构造器中启动它。

结束Java线程
Java线程会以以下三种方式之一结束:

Java线程到达其run()方法的末尾。

Java线程抛出一个未捕获到的Exception或Error。

另一个Java线程调用一个弃用的stop()方法。弃用是指这些方法仍然存在,但是您不应该在新代码中使用它们,并且应该尽量从现有代码中除去它们。

当Java程序中的所有线程都完成时,程序就退出了。
心晴0110
2011-05-24
知道答主
回答量:26
采纳率:0%
帮助的人:19.6万
展开全部
创建好一个线程后,调用start()方法线程开始运行,将自动调用其run()方法。调用sleep()方法,线程进入睡眠状态,在规定时间,这个线程是不会运行的,到时间后会继续运行。wait()方法是暂停一个线程,除非调用notify()和notifyAll()方法,否则不会变成可运行状态。这是wait()和sleep()的区别。学习j2se最好的工具就是api文档,看多了就熟悉了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
当我成回忆
2011-05-24 · TA获得超过577个赞
知道小有建树答主
回答量:1155
采纳率:0%
帮助的人:795万
展开全部
sleep方法好像是睡眠的start方法是开始的,wait方法好像是重新唤醒一个线程的,具体的你查看API啊,详细的很
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冷月寒星丨
2015-10-27 · 超过22用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:35.8万
展开全部
Thread r = new Thread();
r.start();//线程启动
Thread.sleep(1000);//线程暂停1000毫秒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
roserouge
2011-05-24 · TA获得超过462个赞
知道小有建树答主
回答量:1554
采纳率:0%
帮助的人:487万
展开全部
import java.util.Date;

public class Test {

private static final class Task implements Runnable {

private volatile boolean signal = false;

public void stop() {
this.signal = true;
}

public void run() {
while (true) {
System.out.println(new Date());

if (signal) {
break;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

};

/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) {
Task task = new Task();
new Thread(task).start();

try {
Thread.sleep(2 * 10000);
task.stop();
} catch (InterruptedException e) {
e.printStackTrace();
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式