`
beston
  • 浏览: 7930 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

实现线程的stop,suspend和resume方法

阅读更多

Thread的stop,suspend和resume方法不安全,这里使用标识变量,wait和notifyAll实现线程的挂起,恢复和停止.

/**************************************************************************************** 
 Copyright © 2014 Your Company/Org. All rights reserved.<br> 
 Reproduction or transmission in whole or in part, in any form or<br>
 by any means, electronic, mechanical or otherwise, is prohibited<br>
 without the prior written consent of the copyright owner. <br>
 ****************************************************************************************/
package com.beston.concurrency.thread;

/**
 * @ClassName: ThreadCotronl
 * @Description: 线程控制,实现线程的suspend,resume,stop
 * @author beston
 * @date 2014年3月27日 下午5:58:19
 * @version v1.0
 * 
 */
public class ThreadCotronl {
	public static void main(String[] args) throws InterruptedException{
		SuspendResumeStop srs = new SuspendResumeStop();
		Thread t = new Thread(srs);		
		t.start();
		Thread.sleep(2000);
		
		srs.suspend();
		System.out.println("线程挂起。。。。。。");
		Thread.sleep(2000);
		
		//线程恢复
		srs.resume();
		
		Thread.sleep(2000);
	
		
		srs.stop();
		System.out.println("线程停止。。。。。。");	
	}
}
class SuspendResumeStop implements Runnable{
	private boolean paused = false;
	private volatile boolean stop = false;
	private final Object LOCK = new Object();

	public void run() {
		while (!stop) {
			synchronized (LOCK) {
				if (paused) {
					try {
						LOCK.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					//业务代码
					System.out.println("线程执行中。。。。。。");
					try {
						Thread.sleep(300);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			
		}
	}

	public void suspend() {
		synchronized (LOCK) {
			paused = true;
			LOCK.notifyAll();
		}
	}

	public void resume() {
		synchronized (LOCK) {
			paused = false;
			LOCK.notifyAll();
		}
	}
	
	public void stop(){
		stop = true;
	}
}

 效果:

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程挂起。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程执行中。。。。。。

线程停止。。。。。。

 

0
2
分享到:
评论

相关推荐

    线程外部挂起恢复控制(不使用Suspend与Resume中止线程)

    自.NET 2.0以来,Thread.Suspend()与Thread.Resume()方法已过时,VS提示可以使用如Monitor等技术,但是对于刚接触同步控制的人来说理解起来太复杂。本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常...

    c#线程和图形的结合

    实现一个线程结合图形按钮的例子, 方法Start():建立线程类对象后,线程并不能自动运行,用这个方法启动线程。方法IsAlive():判断线程对象是否存在,=true,存在。方法Abort():撤销线程对象。不能撤销一个已不...

    Andriod PM suspend-resume 电源管理

    1.低功耗模式:对于现在的嵌入式芯片,都提供了各种低功率模式,如:提供了STOP,WAIT,DEEP SLEEP等功率状态,为不同的系统应用使用不同的功率模式提供了很好的解决方案。同时,除DEEP SLEEP模式外,在动态电源管理...

    Java多线程教程吐血整理干货.md

    stop,suspend,resume等方法为什么会被遗弃 interrupt,interrupted,isInterrupted方法区别 join方法 yield方法 多线程 进程和线程 进程与线程最主要的区别是它们是操作系统管理资源的不同方式的体现。 准确来说进程与...

    resume_suspend.txt

    高通平台lcd tp操作,suspend resume

    java面试题(线程和JSP及EJB部分).pdf

    答:有两种实现方法,分别是继承Thread类与实现Runnable 接口 用synchronized 关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线 程...

    多线程,高并发.pdf

    1. stop() 和 suspend() 方法为何不推荐使用? 2. sleep() 和 wait() 有什么区别? 3. 同步和异步有何异同,在什么情况下分别使用他们? 4. 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此...

    C#中的线程(四)高级话题

    非阻止同步 Wait和Pulse Suspend和Resume 终止线程

    线程终止问题

    终止线程的三种方法   1. 使用退出标志,使线程正常... 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。   3. 使用interrupt方法中断线程。 

    C# 多线程教材

    C#多线程教材 入门 概述与概念 创建和开始使用多线程 线程同步基础 同步要领 锁和线程安全 Interrupt 和 Abort 线程状态 ...使用多线程 单元模式和Windows ...Wait和Pulse Suspend和Resume 终止线程 概

    多线程,高并发.zip

    1. stop() 和 suspend() 方法为何不推荐使用? 反对使用 stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象 处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出 ...

    线程编程方面若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

    线程编程方面:反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易...

    一个完成端口模型的实现(IOCP)

    IOCPTest定义了服务端的测试接口,可以通过控制命令来实现对Server的Start, Stop, Suspend, Resume操作。 client下IClient定义了客户端的接口,SocketClient实现了IClient,通过ConnectProc以及SendPacketProc两个...

    Android-suspend-and-resume.rar_android_android 唤醒_linux suspend

    休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的, 还有Android中如何把这部分和Linux的机制联系起来的.

    线程编程方面.doc

    线程编程方面 着重JAVA基础 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

    Java中interrupt的使用.docx

    在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。具体原因可以参考Why is Thread.stop deprecated。 在本文中,将讨论中断在java中的...

    用c#实现多线程的小程序

    ThreadStart start = new ThreadStart(Work); Thread thread = new Thread(start); ... thread.Suspend(); Thread.Sleep(3000); Console.WriteLine("挂起后继续执行线程"); thread.Resume();

    java笔试题大集合及答案(另附各大公司笔试题)

    60、java中有几种方法可以实现一...答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 67、线程的基本概念、线程的基本状态以及状态之间的关系

    Java中断线程的方法

    Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!  现在,如果你要安全有效地终止一个线程,应该采用以下这些方法: ...

    多线程下载技术论文.rar

    具体研究内容:下载功能实现,包括单线程下载功能,多线程下载功能,多任务下载功能,删除任务的实现。断点续传等功能包括,下载过程中,暂停下载,承接上次未完成的下载任务。 关键词:多线程;线程安全;断点续传...

Global site tag (gtag.js) - Google Analytics