java怎样在新线程开始时停止正在运行的线程
newButton("a").addActionListener(newActionListener(){publicvoidactionPerformed(Action...
new Button("a").addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread() {
public void run() {
while(true) {
System.out.println("thread1 is running")
}
}
}
};
thread.start();
});
new Button("b").addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread() {
public void run() {
while(true) {
System.out.println("thread2 is running")
}
}
}
};
thread.start();
});
怎样在点击按钮 b 的时候,结束按钮 a 上的线程再开始运程按钮 b 线程? 展开
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread() {
public void run() {
while(true) {
System.out.println("thread1 is running")
}
}
}
};
thread.start();
});
new Button("b").addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread() {
public void run() {
while(true) {
System.out.println("thread2 is running")
}
}
}
};
thread.start();
});
怎样在点击按钮 b 的时候,结束按钮 a 上的线程再开始运程按钮 b 线程? 展开
展开全部
首先告诉你线程的安全关闭一般有这么几种方法,一个是设置运行标记量,如
boolean running = true;
Thread t = new Thread(new Runnable(){
public void run() {
while(running) {
//
}
}
};
那么你这个例子也可以类似的为按钮a上的线程添加一个全局运行标志量running,初值为true。在点击按钮b的时候,设置这个标志量为false,则按钮a上的线程就终止了。
另外一种方法就是采用interrupt()方法,不过就要求按钮a上的线程必须对按钮b中的线程可见。
boolean running = true;
Thread t = new Thread(new Runnable(){
public void run() {
while(running) {
//
}
}
};
那么你这个例子也可以类似的为按钮a上的线程添加一个全局运行标志量running,初值为true。在点击按钮b的时候,设置这个标志量为false,则按钮a上的线程就终止了。
另外一种方法就是采用interrupt()方法,不过就要求按钮a上的线程必须对按钮b中的线程可见。
展开全部
楼主, 你虽然有很多个任务相同的线程,但其实这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;
希望对你有所帮助
就好像,
人是一个类,有湖南,湖北,广东,广西人,
每个人都有一个身份标志。
你把湖南人的标志改了并不会影响到湖北人! 虽然他们都在同一个工地上干同样的活,虽然它们都是妈生的
所以本例中,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本身提供这种方法了吗,没有的话,你自己创建一个全局变量的集合,每次创建线程时都把它放到集合里面.
怎么得到其它线程?我也不知道,你先去百度看看java本身提供这种方法了吗,没有的话,你自己创建一个全局变量的集合,每次创建线程时都把它放到集合里面.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询