`

java Thread 停止 开始 暂停

阅读更多

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就可以自动退出。

分享到:
评论
1 楼 进退取舍 2012-08-08  
感谢楼分享,清淅明了。对我很有用!

相关推荐

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    现代的Java编程中,可以使用`Thread.yield()`让当前线程暂停执行,把CPU时间片让给其他线程,但这并不保证线程会真正暂停。若想实现类似暂停和恢复的功能,可以采用类似停止线程的方法,使用标志变量配合循环检查。 ...

    JAVA线程停止的方法

    本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...

    详解java线程的开始、暂停、继续

    在Java中,线程的开始、暂停和继续操作是通过特定的API和机制来实现的。在本例中,我们将探讨如何创建一个线程来读取文件,并提供对线程状态的控制。 首先,我们看到一个名为`ReadThread`的类,它实现了`Runnable`...

    简单多线程 BackgroundWorker 控制(开始、暂停、继续、停止)

    下面将详细阐述`BackgroundWorker`的使用,包括如何控制其开始、暂停、继续和停止,以及如何刷新进度条和文本框提示。 一、BackgroundWorker的使用基础 `BackgroundWorker`类是异步操作的理想选择,它通过事件模型...

    java摇奖机代码

    - 当按钮文本为“开始游戏”时,按钮文本变为“停止”,并创建三个 `FruitThread` 对象,启动这三个线程开始摇奖。 - 当按钮文本为“停止”时,按钮文本变回“开始游戏”,调用 `setIsRun(false)` 方法停止摇奖...

    Java线程的简单例子

    线程控制是Java线程中的关键部分,包括启动线程、停止线程和暂停线程。启动线程只需调用start()方法,而停止线程则相对复杂,因为直接的stop()方法已废弃,为防止资源泄露,通常通过共享变量或者中断标志来通知线程...

    jl-1.0.1java播放媒体资源.zip

    它支持不同比特率和采样率的MP3文件,并提供了简单的API来控制播放,如播放、暂停、停止等。 在使用JLayer库进行媒体播放时,首先需要将`jl-1.0.1.jar`添加到项目的类路径中。然后,你可以通过以下步骤实现MP3文件...

    javathread.part01.rar

    Java Thread类是线程的核心,它提供了用于创建、控制和管理线程的方法。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写它的run()方法。然后创建该类的实例并调用start()方法...

    javathread.part04.rar

    `javathread.part04.rar`这个压缩包很可能包含了一部分关于Java线程深入学习的资料,可能涵盖了线程的创建、同步、生命周期管理以及线程池等关键主题。下面将详细阐述这些知识点。 1. **线程的创建**: - **通过...

    Java中停止线程执行的方法

    总结来说,Java中暂停或停止线程应谨慎处理,避免使用已废弃的Thread.stop(),而是采用协作的方式,如设置共享变量或利用中断标志。同时,wait()和notify()主要服务于线程间的同步,而不是简单的暂停操作。理解这些...

    java-thread-vedio.rar_java vedio

    这个"java-thread-vedio.rar_java vedio"压缩包文件显然包含了关于Java多线程的视频教程,适合初学者或者需要深化理解多线程的开发者学习。下面我们将详细探讨Java线程的相关知识点。 1. **线程的创建方式**: - *...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    4. **线程操作**:`Thread`类提供了启动、暂停、恢复、设置优先级、中断和销毁线程的方法。 5. **线程状态**:Java线程有五种基本状态:新建、可运行、运行、阻塞和死亡。线程的状态转换反映了其生命周期的不同阶段...

    java音乐播放器源代码

    Java音乐播放器是一种基于Java Swing库开发的桌面应用程序,它能够播放音频文件,提供音乐列表管理,以及控制音乐播放的基本功能,如开始、暂停和停止。在这个项目中,开发者利用了Java的强大功能和Swing的图形用户...

    线程暂停、开始、结束

    在Java或C#等支持多线程的编程语言中,我们经常需要对线程进行控制,例如暂停、开始和结束操作。这些操作有助于协调线程间的执行顺序,避免资源竞争,以及解决复杂的同步问题。以下是对线程暂停、开始和结束相关知识...

    java 编写的倒计时程序

    5. **事件监听(Event Handling)**:如果程序有交互功能,如开始/停止倒计时的按钮,那么它会涉及到事件监听。Java Swing使用匿名内部类或者`ActionListener`接口来处理用户点击事件。 6. **异常处理(Exception ...

    JAVA做的电子钟程序

    5. **Applet生命周期方法**: 包括`init()`, `start()`, `stop()`, 和 `destroy()`,这些方法在Applet的生命周期中被调用,例如初始化时设置界面,开始时启动时间更新,停止时暂停更新,销毁时清理资源。 6. **部署...

    利用JavaSwing、JavaSound实现简易音乐播放器

    - 控制音乐的播放、暂停、停止和切换,通过`Clip`对象的`open()`、`start()`、`stop()`、`setMicrosecondPosition()`等方法实现。 - 实现歌曲的上一曲和下一曲切换,需要维护当前播放的音频文件索引,并根据用户...

    后端JAVA虚拟机JVM调优必备工具

    IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...

    java多线程的两种实现

    在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...

    关于线程的动态停止,一个很经典的多线程麦票程序

    - Java的线程有10个优先级,`Thread.MIN_PRIORITY`(1)、`Thread.NORM_PRIORITY`(5,默认值)和`Thread.MAX_PRIORITY`(10)。优先级较高的线程更有可能获得CPU时间,但并不能保证。 7. **线程安全的实现**: -...

Global site tag (gtag.js) - Google Analytics