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