首页 > 其他分享 >多线程 wait() notify的用法

多线程 wait() notify的用法

时间:2023-03-27 20:32:16浏览次数:44  
标签:void value 线程 notify new Query 多线程 public wait


main 类

 

package endual;

public class MainApp {

	public static void main(String[] args) {
		Query q = new Query(0) ;
		
		Thread thread = new Thread(new Thread1(q)) ;
		Thread thread2 = new Thread(new Thread2(q)) ;
		
		thread.start() ;
		thread2.start() ;
	}
	
}

 

 

 

 集中调用我们做一个类

 

 

package endual;

public class Query {

	private int value = 7;
	private boolean isFlag = false ;
	public Query(int value) {
		
		//this.value = value ;
	}
	
	public synchronized  void getValue() {
		
		if (!isFlag) { //如果是正确的
			
			isFlag = true ;
			notify() ;
		}
		
		try {
			wait() ;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("我是线程1" + (value++)) ;
		
		
	}
	
	public synchronized void setValue() {
		
		if (!isFlag) { //如果是正确的
			
			try {
				wait() ;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
		
		isFlag = false ;
		value-- ;
		System.out.println("我是线程2" + value) ;
		notify() ;
	}
	

}

 

 

我们写两个线程 分别要调用query的get 和set 的方法

 

thread1

package endual;

public class Thread1 implements Runnable{

	private Query q = null ;
	
	public Thread1(Query q) {
		this.q = q ;
	}
	
	public void run() {

		while (true) {
			
			q.getValue() ;
			
		}
		
	}

}

 

 

 

thread2

 

 

package endual;

public class Thread2 implements Runnable{

	private Query q = null ;
	
	public Thread2(Query q) {
		this.q = q ;
	}
	
	public void run() {

		while (true) {
			
		q.setValue() ;
			
		}
		
	}
}

 

====================================================

 

我们来分析程序:

这个是两个线程之间等待以及唤醒对方,对待对方。

但是有一个重要的一点就是要添加一个关键词就是 synchronized 添加到方法的前面,如果不添加的话

会出现一个exception。其实我还不明白这是什么意思也不知道。要查下,平时我们学习的时候没有用到线程,特别是java web方面的学习,底层的框架已经给你写好这些了,我们只需要用的是写一下业务逻辑就可以了

 

 

 

 

 

 

 

标签:void,value,线程,notify,new,Query,多线程,public,wait
From: https://blog.51cto.com/u_16034393/6153202

相关文章

  • java wait() notyfy()的使用
    我们知道,并发的编程在企业中用的很多,对于并发的学习是很重要的。现在我们想从程序上给大家一个分析,在我写这个程序的时候,只知道wait()是线程等待,notify是唤醒线程,还有一个no......
  • 多线程——生产者和消费者(等待唤醒机制)
    生产者和消费者(等待唤醒机制)生产者消费者模式是一个十分经典的多线程协作的模式举例:   实现方式一: 线程的方法代码编写技巧,如run():步骤:(1)循环;(2)同步代码块;(3)判断......
  • android实现多线程基础
    //创建线程类classMythreadextendsThread{@Overridepublicvoidrun(){//定义行为}}//实例化线程类MyThreadmt=newMyThread(“线程名称”);///......
  • 多线程中常见的成员方法
     MyThreadt=newMyThread();1、StringgetName()细节:如果没有给线程设置名字,线程也是有默认的名字的格式:Thread-X(X序号,从0开始)2、voidsetName(Stringname)细......
  • 多线程
    1、概念线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。进程:进程是程序的基本执行实体。多线程:有了多线程,就可以让程序同......
  • jumpserver always wait
    problemdockerps5d34edfc8832jumpserver/jms_all:v2.7.1"./entrypoint.sh"41minutesagoUp21minutes0.0.0.0:80->80/tcp,0.0.0.0:2222-......
  • 多线程的同步和互斥—线程的信号量
    同步://account.h#ifndef_ACCOUNT_H#define_ACCOUNT_H#include<pthread.h>#include<semaphore.h>typedefstruct{intcode;doublebalance;......
  • Python多任务-多线程-多进程-协程-进阶学习
    --多任务-多线程-多进程-协程-进阶学习--文中所提到的案例参考:GITHUB中项目文件夹https://github.com/FangbaiZhang/Python_advanced_learning/tree/master/02_Python_ad......
  • Task 类 多线程
    Task类定义命名空间: System.Threading.Tasks程序集:System.Runtime.dll表示一个异步操作publicclassTask:IAsyncResult,IDisposable继承  Object->Task......
  • 多线程的互斥—读写锁
    //account.h#ifndef_ACCOUNT_H#define_ACCOUNT_H#include<pthread.h>typedefstruct{intcode;doublebalance;//定义一把互斥锁,用......