`
beston
  • 浏览: 8081 次
  • 性别: 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
分享到:
评论

相关推荐

    线程的挂起、唤醒和终止

    然而,`Thread.suspend()`和相应的`Thread.resume()`方法已不推荐使用,因为它们可能导致死锁。现在更推荐使用同步机制(如`synchronized`关键字)或`wait()`/`notify()`方法来实现类似功能。 线程的唤醒则是指将...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    本篇文章将深入探讨C语言和Java语言中的线程实现,以及如何在用户级别进行线程调度。 首先,我们来了解线程的基本概念。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序计数器、栈、局部变量等,但...

    Java 线程详解

    在 Java 中,线程的通信可以通过 wait、notify 和 notifyAll 方法实现。wait 方法可以让线程等待某个事件的发生,notify 方法可以唤醒等待的线程,而 notifyAll 方法可以唤醒所有等待的线程。 在 Java 中,线程的...

    线程组ThreadGroup

    ThreadGroup 还提供了一些其他的方法,例如 stop() 方法可以停止当前 ThreadGroup 中的所有线程,resume() 方法可以恢复当前 ThreadGroup 中的所有线程,suspend() 方法可以暂停当前 ThreadGroup 中的所有线程等。...

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

    `Thread.suspend()`和`Thread.resume()`方法曾被用来暂停和恢复线程,但由于它们可能导致死锁,现在已被弃用。现代的Java编程中,可以使用`Thread.yield()`让当前线程暂停执行,把CPU时间片让给其他线程,但这并不...

    Java多线程与并发系列22道高频面试题(附思维导图和答案解析)

    本文总结了Java多线程与并发系列的22道高频面试题,涵盖了多线程的实现方法、线程停止、notify和notifyAll的区别、sleep和wait的区别、volatile关键字的作用等多方面的知识点。 一、Java中实现多线程的方法 Java中...

    JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止

    在Java中,`Thread.suspend()`和`Thread.resume()`方法已经被废弃,因为它们可能导致死锁。现在,推荐使用`wait()`和`notify()`或`notifyAll()`来实现线程的挂起和恢复。当一个线程调用`wait()`时,它会释放持有的...

    VB-.NET多线程编程的详细说明(完整版).doc

    线程控制方法包括Start、Stop、Abort、Suspend和Resume等,它们允许开发者管理和终止线程。值得注意的是,Stop和Suspend方法可能造成线程挂起在不安全的位置,导致问题。因此,通常推荐使用线程的状态标志或...

    线程练习代码下载即测

    在Java中,虽然可以使用`stop()`、`suspend()`和`resume()`方法来控制线程,但由于这些方法可能导致死锁和资源泄露,已被弃用。推荐使用中断机制(`interrupt()`和`isInterrupted()`),或者共享变量来实现线程的...

    VC 线程封装类 简单易懂

    4. **子类扩展**:允许子类重写`ThreadMethod()`方法以实现具体的线程任务。 #### 重要成员变量 - `m_pThreadFunction`:指向线程入口函数的指针,默认为`CThread::EntryPoint`。 - `m_hThread`:线程句柄。 - `m_...

    Java多线程机制研究.pdf

    Thread类提供了几个方法来控制线程的生命周期,如start()方法、stop()方法、suspend()方法、resume()方法、sleep()方法等。 线程同步 Java多线程机制中,同步是指多个线程之间的相互影响和约束,以确保多个线程...

    Java线程的简单例子

    线程的暂停通常使用suspend()和resume(),但这些方法存在死锁风险,因此现在多使用Thread类的interrupt()方法配合isInterrupted()或InterruptedException来实现线程的暂停和恢复。 线程同步是解决多线程间数据安全...

    线程相关技术26.rar_线程相关技术

    挂起(suspend()和resume())在早期的线程操作中被用来控制线程的执行,但这些方法已不推荐使用,因为它们可能导致死锁。现在更常用的是线程的等待/通知机制,如Java中的wait()和notify(),或者使用条件变量...

    C#多线程之线程控制详解

    在C#中,线程控制方法主要包括Thread.Start()、Thread.Abort()、Thread.Suspend()和Thread.Resume()等。 1. Thread.Start():启动线程的执行,线程从开始执行到结束。 2. Thread.Abort():终止线程的执行,线程立即...

    线程及多线程的详细讲解

    - `resume()`:恢复之前被`suspend()`暂停的线程。 #### 四、线程周期及状态转换 线程在其生命周期中会经历以下几种状态:新建、就绪、运行、阻塞和死亡。 1. **新建**:创建了一个新的线程对象。 2. **就绪**:...

    多线程知识总结

    - 使用`suspend()`和`resume()`来暂停和恢复线程,但这种方式可能会导致死锁问题。 **Yield()**: - 该方法会使当前线程放弃CPU使用权,但并不改变线程的状态。其他同等优先级的线程有机会被执行。 #### 六、线程...

    Java多线程-Thread类的常用结构及线程优先级

    - `suspend()` 和 `resume()`:挂起和恢复线程,由于可能导致死锁,这两个方法也被废弃。 二、线程的优先级 1. 线程调度策略 Java中的线程调度有两种策略:抢占式调度和合作式调度。Java采用抢占式调度,优先级...

    Java实验9多线程设计.doc

    - **resume()**:与suspend()配合使用,恢复挂起的线程,但不安全。 - **join()**:使当前线程等待其他线程完成。 5. **线程调度**: 系统会根据线程的优先级和调度策略进行调度。优先级可以通过setPriority()...

    笔记-1、线程基础、线程之间的共享和协作2

    在Java中,不推荐使用`stop()`、`resume()`和`suspend()`方法来停止线程,因为它们可能导致资源泄漏和死锁。推荐使用`interrupt()`方法,它设置线程的中断标志,线程本身根据中断标志决定是否停止执行。 线程的状态...

    4初学Java多线程:线程的生命周期.pdf

    resume()和suspend()方法分别用于恢复和暂停线程,但这两个方法已被废弃,因为它们可能会导致死锁,建议使用其他方式比如wait()和notify()来实现线程间的通信;stop()方法可以强制结束线程,但是也被废弃,因为它...

Global site tag (gtag.js) - Google Analytics