/**
* * 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,
* 一个时间内只能有一个线程得到执行。
* 另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
*/
package process;
public class syn{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread t1=new MyThread();
Thread ta=new Thread(t1,"A");
Thread tb=new Thread(t1,"B");
ta.start();
tb.start();
}
}
class MyThread extends Thread{
public static int i=0;
public synchronized void run(){
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" synchronized loop "+i);
System.out.println(Thread.currentThread().getName()+" ================== "+i);
}
}
}
synchronized代码期间,如果另一个线程B也要执行同一对象的一段synchronized代码时(不一定与线程A执行的相同),它将
要等到线程A执行完后,才能继续....
问题:如何利用wait() notify() notifyAll()?
在synchronized代码被执行期间,线程可以调用对象的wait()方法,释放对象锁标志,进入等待状态,并且可以调用notify()或者notifyAll()方法通知正在等待的其他线程。notify()通知等待队列中的第一个线程,notifyAll()通知的是等待队列中的所有线程。