`
xkorey
  • 浏览: 153531 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

正确的暂停一个线程

阅读更多
以下代码抄自java核心技术8卷655页。isbn:978-7-111-23950-5,机械工业出版社。
public void run(){
   while(....){
     
        
        if(suspenndRequested){
         suspendLock.lock();
         try{while(suspendRequested)suspendCondition.await();}
         finally{suspendLock.unlock();} 
         }




 }
}
public void requestSuspend(){suspendRequested=true;}
public void requestResume(){
suspendRequest=false;
suspendLock.lock();
try{suspendCondition.signalAll();}
finally{suspendLock.unlock();}
}
private volatile boolean suspendRequested=false;
private Lock suspendLock = new ReentrantLock();
private Condition suspendCondition = suspendLock.newCondition();
分享到:
评论

相关推荐

    C++ 线程暂停、继续

    线程会等待条件变量的一个通知,当需要“暂停”线程时,其他线程可以改变共享状态并通知条件变量,使得原线程进入等待状态;当需要“继续”时,再次发送通知以唤醒线程。 在MFC中,可以使用`CSemaphore`或`CEvent`...

    C#内存释放-线程控制-线程启动-线程暂停

    本文将深入探讨“C#内存释放-线程控制-线程启动-线程暂停”这一主题,结合提供的WFormsThread文件,我们可以假设这是一个关于Windows Forms应用程序中线程管理的实例。 首先,让我们关注线程控制。在C#中,我们通常...

    多线程窗口暂停线程 并恢复

    在多窗口应用中,每个窗口可能需要独立的线程来处理不同的任务,例如,一个窗口可能负责接收数据,另一个窗口可能负责显示这些数据。 "暂停线程并恢复"这一功能在某些情况下非常有用,比如当需要暂时停止某项耗时...

    Qt的MoveToThread显示无法关闭在另一个线程的定时器

    Qt线程有两种方法:1是继承qthread;...解决办法:无法关闭在另一个线程的定时器,是因为定时器要在新的线程中new,不要在构造函数中new出来,这样定时器才属于另一个线程,而不是创造该线程的主线程中;

    Qt之线程的开始暂停恢复停止 源码

    // 暂停线程 } else { // 执行线程任务 } } } public slots: void pauseThread() { shouldPause = true; } void resumeThread() { shouldPause = false; } }; ``` 最后,停止线程是一个需要注意的地方,...

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

    当一个线程调用`wait()`时,它会释放当前持有的锁并进入等待状态,直到其他线程调用`notify()`或`notifyAll()`唤醒它。这种机制常用于实现生产者消费者模型或者哲学家就餐问题等经典并发问题。 2. **线程的停止** ...

    线程暂停、开始、结束

    线程在多线程编程中扮演着至关重要的角色,它使得程序可以同时执行多个不同的任务。...提供的`ThreadDemo`可能是一个实际演示了这些概念的代码实例,通过阅读和分析代码,可以更深入地理解线程的控制和管理。

    android 线程暂停/恢复/退出demo

    例如,我们可以创建一个实现了`Runnable`接口的类: ```java public class MyRunnable implements Runnable { @Override public void run() { // 在这里编写线程执行的代码 } } ``` 然后,在需要启动线程的...

    C#多线程并行管理,通过Task实现,可随时暂停,继续以及停止等

    通过创建`Task`实例,我们可以启动一个新的工作线程,而无需直接操作底层的`Thread`对象。 在C#中,我们可以通过以下几种方式创建和启动`Task`: 1. `Task.Run`: 这是创建并启动新`Task`的最简单方法,它可以将一...

    C#中利用多线程控制打印的暂停和继续

    创建一个新的线程通常涉及实例化一个`Thread`对象,并传递一个委托(方法)作为参数,这个方法将在新线程上执行。 ```csharp Thread printThread = new Thread(new ThreadStart(PrintJob)); printThread.Start(); `...

    自己做的一个C#线程的例子

    本示例"自己做的一个C#线程的例子"将深入探讨如何在C#中创建和管理线程。 在C#中,我们主要使用`System.Threading`命名空间来操作线程。`Thread`类是这个命名空间的核心,它提供了创建、启动、暂停、恢复和终止线程...

    这是一个线程类(Thread

    `wait()`使当前线程等待,`notify()`唤醒一个等待的线程,`notifyAll()`唤醒所有等待的线程。 ### 5. 线程池与`ExecutorService` Java从1.5版本开始引入`ExecutorService`,它是一个线程池接口,可以管理和控制...

    进程线程结束暂停源码_进程与线程

    - Windows系统中,可以使用`SuspendThread()`暂停线程,`ResumeThread()`恢复线程。但同样需要注意,无序的暂停可能导致死锁,因此谨慎使用。 5. **线程的同步与通信** - **互斥量(Mutex)**:保证同一时刻只有一...

    delphi7 多线程测试(40个线程)

    在编程领域,多线程是一种常见且强大的技术,它允许程序同时执行多个任务,从而提高效率和响应性。本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发...

    线程暂停与继续-易语言

    4. **线程暂停**:易语言中没有直接的“暂停线程”命令,但可以通过设置共享变量或者利用线程同步机制(如信号量、事件对象)来间接实现。例如,创建一个全局变量作为暂停标志,线程在运行时检查该标志,如果为真则...

    易语言源码线程暂停与继续.rar

    "易语言源码线程暂停与继续.rar" 是一个压缩包文件,其中包含了关于如何在易语言中实现线程的暂停与继续操作的源代码示例。线程是程序执行的基本单元,能够实现程序的并发执行,提高系统资源的利用率。 线程暂停与...

    采用_beginthreadex创建多线程

    CREATE_SUSPENDED, // 创建标志,可选CREATE_SUSPENDED来暂停线程 &thread_id // 输出的线程ID ); ``` 在这里,`ThreadFunction`是用户定义的函数,它将作为新线程的执行起点。例如: ```cpp DWORD WINAPI ...

    线程创建和管理

    ThreadPool是一个静态类,通过QueueUserWorkItem()方法将工作函数排入线程池,每排入一个工作函数,就相当于请求创建一个线程。线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少...

    易语言多线程控制线程数量源码

    在IT行业中,多线程是程序设计中的一个重要概念,尤其在处理并发任务和优化系统性能时。易语言作为一款中国本土开发的编程语言,也提供了对多线程的支持。本篇将深入探讨易语言中如何实现多线程控制以及线程数量的...

Global site tag (gtag.js) - Google Analytics