一个线程执行完run()方法后,还能再调用start()方法么?? 如题,求详解,能不能再调用呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能再调用,会抛异常public class TT { public static void main(String[] args) { A a1 = new A(); a1.start(); a1.start(); }}class A extends Thread { public void run() { while (true) { System.out.println(this.getId()); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } }}仅有1个线程在跑Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start(Unknown Source) at TT.main(TT.java:40)888888888 另外,如果你说的是手动调用run方法,那么完全可以start... public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 抛出: IllegalThreadStateException - 如果线程已经启动。另请参见:run(), stop()----------------API将规则写的清清楚楚,非要违反规则那就只能承担后果了 总的来说 start 之后就不能再 start,这是定律。但可以换个方法,你只需要设置一个标记位,让它做完了第一件事就阻塞等待,有新的任务就放开它再接着执行。比如: public class Worker implements Runnable { private LinkedBlockingQueue queue; public Worker (LinkedBlockingQueue queue) {this.queue = queue;} public void run() { while(keepRunning) { Task task = (Task) queue.take(); // 如果阻塞队列中没有东西就会等待直到有东西拿到手。 task.doIt(); } }}... 另一个类,它负责分发任务。public void addTask(Task task) { queue.offer(task);} 不能Thead对象拥有一个state状态,参看javadocpublic static enum Thread.State extends Enum<Thread.State>线程状态。线程可以处于下列状态之一: NEW至今尚未启动的线程处于这种状态。 RUNNABLE正在 Java 虚拟机中执行的线程处于这种状态。 BLOCKED受阻塞并等待某个监视器锁的线程处于这种状态。 WAITING无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。 TIMED_WAITING等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。 TERMINATED已退出的线程处于这种状态。 在给定时间点上,一个线程只能处于一种状态。这些状态是虚拟机状态,它们并没有反映所有操作系统线程状态。当一个线程没有start的时候,处于Thread.State.NEW状态,一旦start了就会根据情况进入另一个状态,当run执行结束,就会处于Thread.State.TERMINATED状态LZ可以自己试着调用Thread对象的getState()方法来查看当前线程所属的状态 求教Thread线程的小问题 怎么将客户端和服务器端写到一个程序中 帮我看看这个web.xml文件,明明没有错,就是提示"<web-app>"应该有结束标志"</web-app>"才行 大侠帮帮小弟啊,类的拷贝函数 急!!求教:这个算法怎么写?(100分) 选那个编译器好(java新手上路) 子类访问父类具有相同名称的变量? 如何捕获鼠标在桌面上的任意位置? 怎样从数据库动态生成树型控件显示在WEB页面上作查询用 applet中如何使用settimeout() java初学者提问 java初学者提问,谢谢解答
public static void main(String[] args) {
A a1 = new A();
a1.start();
a1.start();
}
}class A extends Thread {
public void run() {
while (true) {
System.out.println(this.getId());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
仅有1个线程在跑Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at TT.main(TT.java:40)
8
8
8
8
8
8
8
8
8
结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
抛出:
IllegalThreadStateException - 如果线程已经启动。
另请参见:
run(), stop()
----------------API将规则写的清清楚楚,非要违反规则那就只能承担后果了
比如:
public class Worker implements Runnable {
private LinkedBlockingQueue queue;
public Worker (LinkedBlockingQueue queue) {this.queue = queue;}
public void run() {
while(keepRunning) {
Task task = (Task) queue.take(); // 如果阻塞队列中没有东西就会等待直到有东西拿到手。
task.doIt();
}
}
}... 另一个类,它负责分发任务。public void addTask(Task task) {
queue.offer(task);
}
Thead对象拥有一个state状态,参看javadocpublic static enum Thread.State extends Enum<Thread.State>
线程状态。线程可以处于下列状态之一: NEW
至今尚未启动的线程处于这种状态。
RUNNABLE
正在 Java 虚拟机中执行的线程处于这种状态。
BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。
WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
TIMED_WAITING
等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
TERMINATED
已退出的线程处于这种状态。
在给定时间点上,一个线程只能处于一种状态。这些状态是虚拟机状态,它们并没有反映所有操作系统线程状态。当一个线程没有start的时候,处于Thread.State.NEW状态,一旦start了就会根据情况进入另一个状态,当run执行结束,就会处于Thread.State.TERMINATED状态
LZ可以自己试着调用Thread对象的getState()方法来查看当前线程所属的状态