Java多线程间的同步互斥
2013-10-14 22:59
309 查看
/**
* * 当两个并发线程访问同一个对象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()通知的是等待队列中的所有线程。
* * 当两个并发线程访问同一个对象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()通知的是等待队列中的所有线程。
相关文章推荐
- Java添加水印+图片水印+文字水印
- Java的初始化
- Java SE 学习笔记(七)
- java自学笔记之基础篇2
- 《Java语言程序设计(基础篇)》读书笔记(四)
- Spring3.2.3+Quartz2.2.1 整合配置
- Java SE 学习笔记(五)
- 不明觉厉的spring(3)---Aop
- Java 的垃圾回收机制
- java中list和json互相转换
- [java]客户端从服务器下载文件
- java 修改标题栏原来的咖啡图标
- [原创]JAVA号码工具类:实现手机固话号码判断与区号截取
- java 使窗口居中显示
- Eclipse快捷键大全
- java 添加背景音乐
- java IO
- Struts2上传文件异常
- Eclipse用法和技巧——快速复制一行 放弃Ctrl+C和 Ctrl+V
- spring 源码解析