1,写了一个小程序:
public class TestThread {
public static void main(String[] args) {
Thread1 t = new Thread1();
Thread c = new Control(t);
t.setSleep(true);
c.setDaemon(true);
t.start();
c.start();
System.out.println("You can input 'g' and 'Enter' to start your job.");
System.out.println("You can input 'w' and 'Enter' to let your job to wait...");
System.out.println("You can input 's' and 'Enter' to finish your job.");
}
}
class Thread1 extends Thread {
private boolean isSleep = true;
private boolean isStop = false;
public void run() {
while(!isStop) {
if(isSleep) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.println("Thread: "+Thread.currentThread().getName() + " do someting.");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("Thread: "+Thread.currentThread().getName() + " finished.");
}
public void setSleep(boolean sleep) {
this.isSleep = sleep;
}
public void setStop(boolean stop) {
this.isStop = stop;
}
}
class Control extends Thread {
private Thread1 t;
public Control(Thread1 t) {
this.t = t;
}
public void run() {
while(true) {
int r=0;
try {
r=System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
if(r == 'g') {
t.setSleep(false);
} else if(r == 'w') {
t.setSleep(true);
} else if(r == 's') {
t.setStop(true);
}
}
}
}
程序说明:
1,刚开始程序的等待的。
2,你输入‘g’回车后会运行。
3,你输入‘w’回车后会再次等待。
4,再次输入‘g’回车后又会运行。
5,输入‘s'回车,会终止程序。
6,这里将控制线程设置成了Deamon的形式,因为线程t由线程c控制可以终止,而线程c始终无法终止,所以把它设置为后台线程,当让控制的线程t退出时,所有的前台线程都结束了,这样线程c就可以自动退出。
分享到:
相关推荐
现代的Java编程中,可以使用`Thread.yield()`让当前线程暂停执行,把CPU时间片让给其他线程,但这并不保证线程会真正暂停。若想实现类似暂停和恢复的功能,可以采用类似停止线程的方法,使用标志变量配合循环检查。 ...
本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...
在Java中,线程的开始、暂停和继续操作是通过特定的API和机制来实现的。在本例中,我们将探讨如何创建一个线程来读取文件,并提供对线程状态的控制。 首先,我们看到一个名为`ReadThread`的类,它实现了`Runnable`...
下面将详细阐述`BackgroundWorker`的使用,包括如何控制其开始、暂停、继续和停止,以及如何刷新进度条和文本框提示。 一、BackgroundWorker的使用基础 `BackgroundWorker`类是异步操作的理想选择,它通过事件模型...
- 当按钮文本为“开始游戏”时,按钮文本变为“停止”,并创建三个 `FruitThread` 对象,启动这三个线程开始摇奖。 - 当按钮文本为“停止”时,按钮文本变回“开始游戏”,调用 `setIsRun(false)` 方法停止摇奖...
线程控制是Java线程中的关键部分,包括启动线程、停止线程和暂停线程。启动线程只需调用start()方法,而停止线程则相对复杂,因为直接的stop()方法已废弃,为防止资源泄露,通常通过共享变量或者中断标志来通知线程...
它支持不同比特率和采样率的MP3文件,并提供了简单的API来控制播放,如播放、暂停、停止等。 在使用JLayer库进行媒体播放时,首先需要将`jl-1.0.1.jar`添加到项目的类路径中。然后,你可以通过以下步骤实现MP3文件...
Java Thread类是线程的核心,它提供了用于创建、控制和管理线程的方法。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写它的run()方法。然后创建该类的实例并调用start()方法...
`javathread.part04.rar`这个压缩包很可能包含了一部分关于Java线程深入学习的资料,可能涵盖了线程的创建、同步、生命周期管理以及线程池等关键主题。下面将详细阐述这些知识点。 1. **线程的创建**: - **通过...
总结来说,Java中暂停或停止线程应谨慎处理,避免使用已废弃的Thread.stop(),而是采用协作的方式,如设置共享变量或利用中断标志。同时,wait()和notify()主要服务于线程间的同步,而不是简单的暂停操作。理解这些...
这个"java-thread-vedio.rar_java vedio"压缩包文件显然包含了关于Java多线程的视频教程,适合初学者或者需要深化理解多线程的开发者学习。下面我们将详细探讨Java线程的相关知识点。 1. **线程的创建方式**: - *...
4. **线程操作**:`Thread`类提供了启动、暂停、恢复、设置优先级、中断和销毁线程的方法。 5. **线程状态**:Java线程有五种基本状态:新建、可运行、运行、阻塞和死亡。线程的状态转换反映了其生命周期的不同阶段...
Java音乐播放器是一种基于Java Swing库开发的桌面应用程序,它能够播放音频文件,提供音乐列表管理,以及控制音乐播放的基本功能,如开始、暂停和停止。在这个项目中,开发者利用了Java的强大功能和Swing的图形用户...
在Java或C#等支持多线程的编程语言中,我们经常需要对线程进行控制,例如暂停、开始和结束操作。这些操作有助于协调线程间的执行顺序,避免资源竞争,以及解决复杂的同步问题。以下是对线程暂停、开始和结束相关知识...
5. **事件监听(Event Handling)**:如果程序有交互功能,如开始/停止倒计时的按钮,那么它会涉及到事件监听。Java Swing使用匿名内部类或者`ActionListener`接口来处理用户点击事件。 6. **异常处理(Exception ...
5. **Applet生命周期方法**: 包括`init()`, `start()`, `stop()`, 和 `destroy()`,这些方法在Applet的生命周期中被调用,例如初始化时设置界面,开始时启动时间更新,停止时暂停更新,销毁时清理资源。 6. **部署...
- 控制音乐的播放、暂停、停止和切换,通过`Clip`对象的`open()`、`start()`、`stop()`、`setMicrosecondPosition()`等方法实现。 - 实现歌曲的上一曲和下一曲切换,需要维护当前播放的音频文件索引,并根据用户...
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
Java实现多线程断点下载是一项实用的技术,它允许用户在下载大文件时暂停和恢复,提高下载效率。本文将详细解析如何使用Java实现这一功能。 首先,理解多线程下载的基本原理。线程可以被视为下载任务的一个独立通道...
在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...