在java中什么办法可以让线程停止然后再重新启动它

Python018

在java中什么办法可以让线程停止然后再重新启动它,第1张

1.你可以用布尔值来控制是否让线程运行。例:while(boolean isLive){} 当isLive为true线程就运行,否则不运行。

2.你可以用对象。例:while(Object o != null)当对象存在的时候线程就运行,否则不运行!

3.你可以用wait()方法来让线程等待,然后用notify()、notifyAll()在适当的时候唤醒线程、或者唤醒所有在些等待的线程!

例:一个挺不错的例子---吃馒头和做馒头。

一个线程做馒头,做好了放在篮子里(容量为10)。

一个线程吃馒头,从篮子里拿馒头吃(如果篮里有馒头)。

还有一点就是为了看到明显的等待效果,用一个随机数来决定做和吃的速度。这样就不会行成做一个,吃一个,篮子永远装不满的不理想效果!(最好就是做稍快于吃)

这时,当篮子满了,你就应该调用wait()方法来让做的线程等待,让吃的线程将篮子腾出空间放馒头。同时,吃的线程也应该通知做的线程可以做馒头了(就应该调用notify()来唤醒做的线程)。

这个例子应该就是你想要的“停止”后再重新启动吧!

如果你说的是完全停止(死了),那就不行了!

楼主, 你虽然有很多个任务相同的线程,但其实这N个线程并不是同一个对象,

就好像,

人是一个类,有湖南,湖北,广东,广西人,

每个人都有一个身份标志。

你把湖南人的标志改了并不会影响到湖北人! 虽然他们都在同一个工地上干同样的活,虽然它们都是妈生的

所以本例中,N多个线程对象生成,并启动后一个一个都是单独的对象,在单独的运行空间里跑。表面上看起来是相同的任务,其实是不相同的

boolean runflag=true这个标志每个对象都有一个,你改变了其中一个以后,其它线程并不会受到影响;

那么如果我就是想达到改变一次就能停止所有线程呢? 方法是将runflag给设成static即 public static runflag=true

这样这个runflag只会生成一次。改变一次就会影响全部对象。

就好像,湖南湖北人都只有一个祖国, 国家富强了,所有人都受益

如果要用id来管理线程也是可以的,用Hashtable来存储线程,Hashtable需要一个主键key,你在线程对象内生成一个不可能重复id传给它做主键就行了。

但即使这样,也不要随便使用sun不推荐使用的stop()方法停止线程,这样会造成很多不可预料的后果。 而还是应该使用改变runflag的形式

即:

myThread mt=(myThread)hashtable.get(id)

mt.runflag=false

希望对你有所帮助

java.lang.System类

static void    exit(int status) 

          终止当前正在运行的 Java 虚拟机。