请教:线程设计问题,请大家帮忙,来者有分
有这样一个线程问题(也许不是线程问题@_@)
1.我需要在一个主程序中控制三个程序,主程序启动可以启动三个程序(需要启动的程序在启动主程序的时候指定)
2.主程序接受用户的输入以便来决定停止三个程序中的哪一个程序
3.如果请求停止的程序的事务没有处理完成,那么需要该事物处理完成后将该程序停止
备注:主程序启动的三个程序是轮询程序
请大家给点设计的思路,谢谢!
问题点数:100、回复次数:16Top
1 楼shangqiao(伤桥(千万不要理解为我可怜桥,是“伤心桥下”的缩写))回复于 2004-09-04 15:49:25 得分 2
"主程序启动的三个程序是轮询程序",请问是什么意思,他论询什么Top
2 楼CJMaster(新兵)回复于 2004-09-04 18:12:36 得分 2
upTop
3 楼007JavaKing(乖乖咙的咚)回复于 2004-09-04 20:10:42 得分 2
怎么搞的?Top
4 楼riverwater(小河流水)回复于 2004-09-04 20:24:08 得分 50
很简单啊。你已经基本说明白了。
一个主控类,三个线程类(当然可能是一个,被你示例化了三份)。
主控类用来调用/运行三个线程类、接收用户输入、停止指定线程类。
线程类是自循环执行,当退出条件满足,则退出
大概写了一个流程性质的东西,供参考
public class TMainClass{
public static void main(String[] args){
根据参数启动TloopThread
启动线程
thread1=new TloopThread();
thread1.start();
接受客户输入
if (客户要停止线程1){
thread1.setStop();
}
}
}
class TloopThread extends Thread{
boolean isStop=false;
public void run(){
while(!isStop){
//循环执行
}
}
//设置停止
public void setStop(){
isStop=true;
}
}Top
5 楼alpha15(奥法)回复于 2004-09-05 02:37:14 得分 5
停止线程可以直接用thread1.stop();Top
6 楼taoxianxue(--孤独的徘徊者--)回复于 2004-09-05 06:16:53 得分 2
学习中~~~~~~~~~~Top
7 楼opencsdn(虚心求教)回复于 2004-09-05 09:26:13 得分 10
问题1:在主线程中启动三个线程没什么问题.
问题2:给三个线程各配一个ID,根据输入终止Thread.stop();
问题3:你把三个线程将要完成的任务放在它的run()方法时,如果处理完了,这个线程也就自动结束了所以不需要人为终止.Top
8 楼ntzls()回复于 2004-09-05 09:42:20 得分 2
polling?Top
9 楼soupeven(竣杰)回复于 2004-09-05 09:43:46 得分 2
关注一下
Top
10 楼riverwater(小河流水)回复于 2004-09-05 19:25:44 得分 10
>>回复人: alpha15(奥法) ( ) 信誉:100
>>停止线程可以直接用thread1.stop();
虽然使用Stop可以强制终止一个线程,但是java2中已经不推荐这样做了,属于deprecated的。还是判断退出条件相对好一点点……Top
11 楼javahw(一)回复于 2004-09-05 19:37:16 得分 0
我部门正在招聘JAVA工程师,要求软件基础良好,学习能力强,熟悉J2SE。如有在深圳、青岛、烟台的朋友感兴趣请把简历发给我:
liufrank@huawei.com
Top
12 楼samsung45()回复于 2004-09-05 19:45:43 得分 2
另外补充一下,如果你希望这个程序是健壮的,最好加入synchronized机制。Top
13 楼jiangnanyuzi(江南愚子)回复于 2004-09-05 21:54:17 得分 5
riverwater(小河流水)的方案是可行的,一点改进建议:
1.private volatile boolean isStop = false;
2.轮询是不建议采用的方式。所谓轮询是指类似下列的代码:
while(某个条件不满足){
sleep(1000);
}
使用while循环始终查询某个条件是否满足,不满足就休眠一段时间,直到等待条件满足为止。这样会占用更多CPU资源,建议采用的方法是用wait()/notifyAll()取代轮询。
while(某个条件不满足){
object1.wait();
}
而在其它线程中当该条件满足时通过 object1.notifyAll() 唤醒该线程。
Top
14 楼zgysc(翠湖寒)回复于 2004-09-06 08:17:28 得分 2
结束线程最好不要直接调用stop()方法,,你可以加上判断 isAlive(),再用stopTop
15 楼ipconfiger(小李不冲动)回复于 2004-09-06 08:32:16 得分 2
程序应该是进程,这个应该属于进程调度哦Top
16 楼chan2chen(蓝忆雨夜)回复于 2004-09-06 23:45:30 得分 2
学习。。。。。。Top




