若问关于线程 在JFrame调用一个自己重写的线程MyThread类,里面run函数中为sleep(1000)后打印数字。现在要想在JFrame增加一个暂停按钮,点了之后打印数字暂停,再点打印继续。请问怎么实现啊?suspend和resume已经废弃了吧?也不知道该怎么用wait和notify 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同步方法中wait。点击的时候notify,可以指定线程唤醒执行,也可以notifyAll全部唤醒。 增加一个boolean boo = false每次点击的时候根据boo的值判断是暂停还是唤醒,最后boo=!boo; 不知道可以不/* * file: Pause.java * class: Pause * * description: * * @author: leisore * @version: V1.0.0 */package cn.leisore.daily._2010_06_24;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class PauseDemo extends Thread { private int counter = 0; private Object obj = new Object(); private boolean pause = false; private volatile boolean stop = false; public PauseDemo() { super(); } public void run() { while (!stop) { synchronized (obj) { System.out.println("run:" + counter++); } try { sleep(1000); } catch (InterruptedException e) { // e.printStackTrace(); } synchronized (obj) { if (pause) { try { System.out.println("pause"); obj.wait(); } catch (InterruptedException e) { // e.printStackTrace(); } pause = false; } } } } public void pause() { synchronized (obj) { if (!pause) { pause = true; interrupt(); obj.notifyAll(); } } } public void next() { synchronized (obj) { if (pause) { pause = false; obj.notifyAll(); } } } public void shutdown() { synchronized (obj) { if (!stop) { stop = true; interrupt(); obj.notifyAll(); } } } public static void main(String[] args) { final PauseDemo pd = new PauseDemo(); pd.start(); new Thread() { public void run() { BufferedReader br = new BufferedReader(new InputStreamReader( System.in)); String line = null; boolean stop = false; while (!stop) { try { line = br.readLine(); } catch (IOException e) { e.printStackTrace(); } if ("p".equalsIgnoreCase(line)) { pd.pause(); } else if ("n".equalsIgnoreCase(line)) { pd.next(); } else if ("s".equalsIgnoreCase(line)) { pd.shutdown(); stop = true; } } } }.start(); }} 谢谢了,分都给你吧 但是你设置如果在sleep的时候调用interrupt();会抛interruptedException的异常,我反正就单线程所以就注掉了,如果有改进意见别忘告诉我~~ 关于double类型 前辈:推荐1款UML建模工具吧 帮忙找找问题 JAVAhash表按对象加入的顺序排序 java中如何控制一个方法的最多执行时间? 欢迎加入我的java群:25250314 如何实现群聊? java 引用的问题 import的问题 请教! socket发送邮件 xwork分为xwork和xwork2?
每次点击的时候根据boo的值判断是暂停还是唤醒,最后boo=!boo;
* file: Pause.java
* class: Pause
*
* description:
*
* @author: leisore
* @version: V1.0.0
*/
package cn.leisore.daily._2010_06_24;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class PauseDemo extends Thread { private int counter = 0;
private Object obj = new Object();
private boolean pause = false;
private volatile boolean stop = false; public PauseDemo() {
super();
} public void run() {
while (!stop) {
synchronized (obj) {
System.out.println("run:" + counter++);
} try {
sleep(1000);
} catch (InterruptedException e) {
// e.printStackTrace();
} synchronized (obj) {
if (pause) {
try {
System.out.println("pause");
obj.wait();
} catch (InterruptedException e) {
// e.printStackTrace();
} pause = false;
}
}
}
} public void pause() {
synchronized (obj) {
if (!pause) {
pause = true;
interrupt();
obj.notifyAll();
}
}
} public void next() {
synchronized (obj) {
if (pause) {
pause = false;
obj.notifyAll();
}
}
} public void shutdown() {
synchronized (obj) {
if (!stop) {
stop = true;
interrupt();
obj.notifyAll();
}
}
} public static void main(String[] args) {
final PauseDemo pd = new PauseDemo();
pd.start(); new Thread() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
boolean stop = false;
while (!stop) {
try {
line = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if ("p".equalsIgnoreCase(line)) {
pd.pause();
} else if ("n".equalsIgnoreCase(line)) {
pd.next();
} else if ("s".equalsIgnoreCase(line)) {
pd.shutdown();
stop = true;
}
}
}
}.start();
}
}
谢谢了,分都给你吧 但是你设置如果在sleep的时候调用interrupt();会抛interruptedException的异常,我反正就单线程所以就注掉了,如果有改进意见别忘告诉我~~