Java实现线程“暂停”和“继续”的功能。虽然suspend方法和resume方法已经过时,但是感觉实现起来比较方便。当然,前提是程序不是很复杂,不会出现死锁。
下面便是演示代码,可以直接运行看效果。
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class SwingSuspendResume extends JPanel implements Runnable {
private static final String[] symbolList = { "|", "/", "-", "\\", "|", "/",
"-", "\\" };
private Thread runThread;
private JTextField symbolTF;
public SwingSuspendResume() {
symbolTF = new JTextField();
symbolTF.setEditable(false);
symbolTF.setFont(new Font("Monospaced", Font.BOLD, 26));
symbolTF.setHorizontalAlignment(JTextField.CENTER);
final JButton suspendB = new JButton("Suspend");
final JButton resumeB = new JButton("Resume");
suspendB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
suspendNow();
}
});
resumeB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resumeNow();
}
});
JPanel innerStackP = new JPanel();
innerStackP.setLayout(new GridLayout(0, 1, 3, 3));
innerStackP.add(symbolTF);
innerStackP.add(suspendB);
innerStackP.add(resumeB);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.add(innerStackP);
}
private void suspendNow() {
if (runThread != null) { // avoid NullPointerException
runThread.suspend();
}
}
private void resumeNow() {
if (runThread != null) { // avoid NullPointerException
runThread.resume();
}
}
public void run() {
try {
// Store this for the suspendNow() and
// resumeNow() methods to use.
runThread = Thread.currentThread();
int count = 0;
while (true) {
// each time through, show the next symbol
symbolTF.setText(symbolList[count % symbolList.length]);
Thread.sleep(200);
count++;
}
} catch (InterruptedException x) {
// ignore
} finally {
// make sure that the reference to it is also lost.
runThread = null;
}
}
public static void main(String[] args) {
SwingSuspendResume vsr = new SwingSuspendResume();
Thread t = new Thread(vsr);
t.start();
JFrame f = new JFrame();
f.setContentPane(vsr);
f.setSize(320, 200);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
分享到:
相关推荐
NULL 博文链接:https://lxl13041491.iteye.com/blog/2167118
Java线程模块Java线程之秒表新手学习Java线程模块时,利用Java中设置线程的暂停间隔,做的简易秒表
JAVA线程停止的方法
注意: 如果下载后无法直接运行,则查看电脑是否有F盘,如果...6、对于正在下载和暂停的任务,可以再下载分块图示中查看文件的分块下载情况; (灰色为未下载,绿色为下载中,蓝色为完成) 7、若下载中删除任务,则任
线程暂停与继续.
java中多线程下载学习,又新增了断点的实现,可以实现暂停继续下载网络文件的功能
考虑以下场景需求: 1.A同学计算一个结果res 2.B同学需要等待A同学的结果res 需要用到保护性暂停:一个线程等待另外一个线程的执行结果 这里我们让A,B同学关联到一个类。
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程和线程安全,以及如何基于Http协议实现断点续传功能。该项目提供了一个完整的源代码包,可以作为学习...
线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道,Java实现多线程断点下载实例代码(下载过程中可以暂停),有兴趣的可以了解一下。
如何暂停线程 线程的一些其他用法 在char02包里放置了Java对变量和对象并发访问的知识的代码。内容如下: 对于方法的同步处理 对于语句块的同步处理 对类加锁的同步处理 保证可见性的关键字——volatile 在...
实现了音乐列表、播放、暂停、上下歌曲切换等音乐播放器基本功能。利用到JavaSwing、多线程、音乐控制等多个知识点。且代码注释详细。欢迎下载~有问题可以私信我噢 ^_^
一、暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法。对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式。或许有人会问,为什么不使用等待wait()或通知notify()?要...
除了基本的线程创建和启动,Java还提供了一些管理线程的方法和工具,例如: sleep 方法:使当前线程暂停执行一段时间。 join 方法:等待其他线程执行完毕后再继续执行。 interrupt 方法:中断线程的执行。 ...
获取线程基本信息_暂停线程_线程的优先级_多线程的安全性_线程同步1.线程操作的常用方法2.暂停线程执行 sleep_yield_join_stop3.线程的优先级问题4.多线程的安全性问题5.线程同步1.同步代码块2.同步方法 1.线程操作...
本文将介绍通过线程读取文件内容,并且可以控制线程的开始、暂停、继续,来控制读文件。具有一定的参考作用,下面跟着小编一起来看下吧
在单线程编程中,我们可以使用轮询的方式来实现,即频繁地判断是否满足保护条件,若不满足则继续判断,若满足则开始执行。但在多线程编程中,这种方式无疑是非常低效的。如果一个线程持续进行无意义的判断而不释放...
java下载器,可实现下载、暂停等功能,有新建对话框,能实现多线程下载