概述
线程的启动,暂停和终止
线程的启动暂停和终止,听起来很简单,不过经常有初学者在这个问题上卡住,经常是启动了,能暂停,但再要启动就不行了,其实这个问题比较容易解决,思路也很简单,就是在启动线程的时候用一个判断语句锁定整个run()方法就可以了。
并且如何停止java的线程一直是一个困恼我们开发多线程程序的一个问题。这个问题最终在Java5的java.util.concurrent中得到了回答:使用interrupt(),让线程在run方法中停止。
简介
在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通过这些方法,我们可以对线程进行方便的操作,但是这些方法中,只有start()方法得到了保留。
在Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中详细讲解了舍弃这些方法的原因。那么,我们究竟应该如何停止线程呢?
下面是我在单线程中的启动,暂停,继续并重新开始运行线程的代码实现。
代码片段1
package Threadtest;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
/**
* 测试线程的中断,继续,中断,继续
*
* @author Administrator
*
*/
public class User extends JFrame {
public void init() {
this.setTitle("测试线程");
this.setLayout(new FlowLayout());
this.setSize(300, 500);
// 创建一个进度条对象
javax.swing.JProgressBar jpa = new javax.swing.JProgressBar();
jpa.setMaximum(600);// 设置最大度
jpa.setValue(0);
this.add(jpa);
final javax.swing.JLabel la = new javax.swing.JLabel("显示区");
this.add(la);
javax.swing.JButton bu1 = new javax.swing.JButton("开始");
this.add(bu1);
javax.swing.JButton bu2 = new javax.swing.JButton("停止");
this.add(bu2);
this.setVisible(true);
// 创建并启动后台线程:
final Worker worker = new Worker(la, jpa, bu1, bu2);
worker.start();
bu1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按钮上的标签应改为停止 OK
worker.changeState();
}
});
bu2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按钮上的标签应改为停止 OK
worker.stopState();
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
User u = new User();
u.init();
}
}
代码片段2
package Threadtest;
import javax.swing.JButton;
import javax.swing.JProgressBar;
//1.继承Thread类
//2.重写run方法
public class Worker extends Thread {
private javax.swing.JLabel la;
private boolean isSleep = true;// 暂停标志
private javax.swing.JProgressBar jpa;
private javax.swing.JButton bu1;
private javax.swing.JButton bu2;
private boolean stop = true;
public Worker(javax.swing.JLabel la, JProgressBar jpa, JButton bu1,
JButton bu2) {
this.jpa = jpa;
this.la = la;
this.bu1 = bu1;
this.bu2 = bu2;
}
// 指示线程是否修改标签上的内容
public void changeState() {
isSleep = !isSleep;
bu1.setText("暂停");
}
public void stopState() {
stop = !stop;
}
// 线程的运行,是从run方法开始执行
// 当run方法执行完毕时,一个线程退出!
public void run() {
int count = 0;
while (true) {
if (stop) {
if (!isSleep) {
bu1.setText("开始");
count += 10;
jpa.setValue(count);
String s = "" + count;
la.setText(s);
}
try {
Thread.sleep(100);
if (count == 600) {
break;
}
} catch (Exception ef) {
ef.printStackTrace();
}
}
}
}
}
最后
以上就是失眠咖啡为你收集整理的线程的启动,暂停和终止的全部内容,希望文章能够帮你解决线程的启动,暂停和终止所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复