`
nannan408
  • 浏览: 1770991 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程wait和notify的针对每个线程,实现·随时暂停和唤醒

阅读更多
   多线程的利用在进行进程调度中具有重要的意义,是java的一个比较有意义的功能,它实现了时间和空间上的合理分配。以下例子实现了两个线程的随时单独暂停和继续,多个线程只要往上加就可以了,代码如下:

public class TestThread implements Runnable {
public  int state1 = 0;
public int state = 0;
public String name;

public TestThread(String name) {
// new Thread(this).start();
this.name = name;
}

@Override
public void run() {
// state为2时,进入等待,等到state1=1时的唤醒后继续
synchronized (this) {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (2 == state) {
System.out.println(this.state);
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(this.name + " Run--------------->");
}
}

}

public void wakeUpThisThread() {
synchronized (this) {
if (1 == this.state1) {
this.notify();
}
}
}

public static void main(String[] args) {
//启动两个线程做对比
TestThread tt1 = new TestThread("Thread1");
Thread t1 = new Thread(tt1);
t1.start();

// 第二段
TestThread tt2 = new TestThread("Thread2");
Thread t2 = new Thread(tt2);
t2.start();

        //5秒钟后看线程暂停
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tt1.state = 2;
tt2.state = 2;
     
//8秒后只恢复线程1,23秒后恢复线程2,可见notify并不是针对所有的,是可以单独针对某线程的
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("激活");
tt1.state1 = 1;
tt1.state = 0;
tt1.wakeUpThisThread();

tt2.state1 = 1;
tt2.state = 0;
// tt2.wakeUpThisThread();
          int count=0;
while (true) {
count++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(15==count){
tt2.wakeUpThisThread();
}
}

}

}
0
0
分享到:
评论

相关推荐

    Java多线程wait和notify

    在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...

    41.线程间的通信-wait与notify-只唤醒一个线程或所有线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    主线程去控制子线程wait与notify

    在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...

    java之wait,notify的用法([ 详解+实例 ])

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    浅谈java多线程wait,notify

    在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...

    一个理解wait()与notify()的例子

    本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...

    java线程-保护性暂停(wait,notify实现).docx

    Java 线程保护性暂停(wait,notify 实现) ...本文详细讲解了 Java 线程中的保护性暂停机制,即 wait 和 notify 方法的实现,并提供了一个实际的示例代码,演示如何使用保护性暂停机制来实现线程之间的通信。

    java中几个notify、wait使用实例

    在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...

    线程的挂起、唤醒和终止

    在编程中,我们常常需要对线程进行控制,包括挂起、唤醒和终止等操作,以实现更加灵活的程序设计。下面我们将深入探讨这些知识点。 首先,线程的挂起是指将一个正在运行的线程暂停执行,使其进入等待状态。这通常...

    wait,notify等线程知识.pdf

    Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...

    Java的sychronized、wait和notify范例

    `synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...

    wait_notify_demo

    `wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...

    深入理解Wait、Notify和Wait与sleep区别

    1. **wait()**:当一个线程调用对象的`wait()`方法时,它会释放当前对象的锁,并进入等待池,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法唤醒它。唤醒后,线程不会立即恢复执行,而是需要重新获取对象...

    详细分析java线程wait和notify

    这个例子展示了如何通过`wait()`和`notify()`实现线程间的交替执行。 需要注意的是,`wait()`方法会抛出`InterruptedException`,在调用`wait()`之前,通常需要检查线程是否已经被中断,或者在`catch`块中妥善处理...

    源码—Java多线程5—死锁和wait notify notifyAll

    源码—Java多线程5—死锁和wait notify notifyAll

    唤醒阻塞休眠线程示例

    每个`Lock`实例可以有多个条件变量,允许线程在特定条件下等待,并由其他线程唤醒。 8. **信号量(Semaphore)**:信号量是一种同步工具,允许多个线程同时访问有限资源。它可以用来控制进入某临界区的线程数量,当...

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

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

    Java多线程中wait、notify、notifyAll使用详解

    6. notify 和 notifyAll的区别notify方法只唤醒一个等待(对象的)线程并使该线程开始执行,而notifyAll 会唤醒所有等待(对象的)线程。 五、wait、notify、notifyAll方法的使用场景 wait、notify、notifyAll方法...

Global site tag (gtag.js) - Google Analytics