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; } }
效果:
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程挂起。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程执行中。。。。。。
线程停止。。。。。。
相关推荐
然而,`Thread.suspend()`和相应的`Thread.resume()`方法已不推荐使用,因为它们可能导致死锁。现在更推荐使用同步机制(如`synchronized`关键字)或`wait()`/`notify()`方法来实现类似功能。 线程的唤醒则是指将...
本篇文章将深入探讨C语言和Java语言中的线程实现,以及如何在用户级别进行线程调度。 首先,我们来了解线程的基本概念。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序计数器、栈、局部变量等,但...
在 Java 中,线程的通信可以通过 wait、notify 和 notifyAll 方法实现。wait 方法可以让线程等待某个事件的发生,notify 方法可以唤醒等待的线程,而 notifyAll 方法可以唤醒所有等待的线程。 在 Java 中,线程的...
ThreadGroup 还提供了一些其他的方法,例如 stop() 方法可以停止当前 ThreadGroup 中的所有线程,resume() 方法可以恢复当前 ThreadGroup 中的所有线程,suspend() 方法可以暂停当前 ThreadGroup 中的所有线程等。...
`Thread.suspend()`和`Thread.resume()`方法曾被用来暂停和恢复线程,但由于它们可能导致死锁,现在已被弃用。现代的Java编程中,可以使用`Thread.yield()`让当前线程暂停执行,把CPU时间片让给其他线程,但这并不...
本文总结了Java多线程与并发系列的22道高频面试题,涵盖了多线程的实现方法、线程停止、notify和notifyAll的区别、sleep和wait的区别、volatile关键字的作用等多方面的知识点。 一、Java中实现多线程的方法 Java中...
在Java中,`Thread.suspend()`和`Thread.resume()`方法已经被废弃,因为它们可能导致死锁。现在,推荐使用`wait()`和`notify()`或`notifyAll()`来实现线程的挂起和恢复。当一个线程调用`wait()`时,它会释放持有的...
线程控制方法包括Start、Stop、Abort、Suspend和Resume等,它们允许开发者管理和终止线程。值得注意的是,Stop和Suspend方法可能造成线程挂起在不安全的位置,导致问题。因此,通常推荐使用线程的状态标志或...
在Java中,虽然可以使用`stop()`、`suspend()`和`resume()`方法来控制线程,但由于这些方法可能导致死锁和资源泄露,已被弃用。推荐使用中断机制(`interrupt()`和`isInterrupted()`),或者共享变量来实现线程的...
4. **子类扩展**:允许子类重写`ThreadMethod()`方法以实现具体的线程任务。 #### 重要成员变量 - `m_pThreadFunction`:指向线程入口函数的指针,默认为`CThread::EntryPoint`。 - `m_hThread`:线程句柄。 - `m_...
Thread类提供了几个方法来控制线程的生命周期,如start()方法、stop()方法、suspend()方法、resume()方法、sleep()方法等。 线程同步 Java多线程机制中,同步是指多个线程之间的相互影响和约束,以确保多个线程...
线程的暂停通常使用suspend()和resume(),但这些方法存在死锁风险,因此现在多使用Thread类的interrupt()方法配合isInterrupted()或InterruptedException来实现线程的暂停和恢复。 线程同步是解决多线程间数据安全...
挂起(suspend()和resume())在早期的线程操作中被用来控制线程的执行,但这些方法已不推荐使用,因为它们可能导致死锁。现在更常用的是线程的等待/通知机制,如Java中的wait()和notify(),或者使用条件变量...
在C#中,线程控制方法主要包括Thread.Start()、Thread.Abort()、Thread.Suspend()和Thread.Resume()等。 1. Thread.Start():启动线程的执行,线程从开始执行到结束。 2. Thread.Abort():终止线程的执行,线程立即...
- `resume()`:恢复之前被`suspend()`暂停的线程。 #### 四、线程周期及状态转换 线程在其生命周期中会经历以下几种状态:新建、就绪、运行、阻塞和死亡。 1. **新建**:创建了一个新的线程对象。 2. **就绪**:...
- 使用`suspend()`和`resume()`来暂停和恢复线程,但这种方式可能会导致死锁问题。 **Yield()**: - 该方法会使当前线程放弃CPU使用权,但并不改变线程的状态。其他同等优先级的线程有机会被执行。 #### 六、线程...
- `suspend()` 和 `resume()`:挂起和恢复线程,由于可能导致死锁,这两个方法也被废弃。 二、线程的优先级 1. 线程调度策略 Java中的线程调度有两种策略:抢占式调度和合作式调度。Java采用抢占式调度,优先级...
- **resume()**:与suspend()配合使用,恢复挂起的线程,但不安全。 - **join()**:使当前线程等待其他线程完成。 5. **线程调度**: 系统会根据线程的优先级和调度策略进行调度。优先级可以通过setPriority()...
在Java中,不推荐使用`stop()`、`resume()`和`suspend()`方法来停止线程,因为它们可能导致资源泄漏和死锁。推荐使用`interrupt()`方法,它设置线程的中断标志,线程本身根据中断标志决定是否停止执行。 线程的状态...
resume()和suspend()方法分别用于恢复和暂停线程,但这两个方法已被废弃,因为它们可能会导致死锁,建议使用其他方式比如wait()和notify()来实现线程间的通信;stop()方法可以强制结束线程,但是也被废弃,因为它...