首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

java并发 wait,notify,notifyAll,synchronized(1)

2013-11-18 
java并发 wait,notify,notifyAll,synchronized(一)/** **/package com.mutex/** * 用wait(),notify()实现

java并发 wait,notify,notifyAll,synchronized(一)
/** * */package com.mutex;/** * 用wait(),notify()实现线程的互斥 * * 当MainTask运行10次以后,SubTask运行5次,如此依次循环交替执行 * */public class MainClient {//决定线程是否运行public static volatile boolean notifyRun=true;//对象锁public static final Object Lock=new Object();/** * @param args */public static void main(String[] args) throws Exception{//主任务运行new Thread(new MainTask()).start();Thread.sleep(1000);//子任务运行new Thread(new SubTask()).start();}}

?

?

? ? ?

package com.mutex;public class MainTask implements Runnable {private int n = 10;@Overridepublic void run() {while (true) {System.out.println(" -------- MainTask -----------");//获取对象MainClient.Lock上的锁synchronized (MainClient.Lock) {if(!MainClient.notifyRun){//唤醒MainClient.Lock wait set中的所有线程MainClient.Lock.notifyAll();MainClient.notifyRun=true;}if(MainClient.notifyRun){for (int i = 1; i <= n; i++) {System.out.println("MainTask run." + i);}try {//本线程放入wait set,释放对象MainClient.Lock上的锁MainClient.Lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}}}

?

?

?

? ??

package com.mutex;public class SubTask implements Runnable{private int n=5;@Overridepublic void run() {while(true){System.out.println(" -------- SubTask -----------");//获取对象MainClient.Lock上的锁synchronized (MainClient.Lock) {if(!MainClient.notifyRun){try {MainClient.Lock.wait();} catch (InterruptedException e) {e.printStackTrace();}MainClient.notifyRun=true;}for(int i=1;i<=n;i++){System.out.println("SubTask run."+i);}    //本线程放入wait set,释放对象MainClient.Lock上的锁,让MainTask运行    MainClient.Lock.notifyAll();    MainClient.notifyRun=false;}}}}

?

?

运行结果:

?-------- MainTask -----------

MainTask run.1

MainTask run.2

MainTask run.3

MainTask run.4

MainTask run.5

MainTask run.6

MainTask run.7

MainTask run.8

MainTask run.9

MainTask run.10

SubTask run.1

SubTask run.2

SubTask run.3

SubTask run.4

SubTask run.5

?-------- SubTask -----------

?-------- MainTask -----------

MainTask run.1

MainTask run.2

MainTask run.3

MainTask run.4

MainTask run.5

MainTask run.6

MainTask run.7

MainTask run.8

MainTask run.9

MainTask run.10

SubTask run.1

SubTask run.2

SubTask run.3

SubTask run.4

SubTask run.5

?-------- SubTask -----------

?-------- MainTask -----------

MainTask run.1

MainTask run.2

MainTask run.3

MainTask run.4

MainTask run.5

MainTask run.6

MainTask run.7

MainTask run.8

MainTask run.9

MainTask run.10

SubTask run.1

SubTask run.2

SubTask run.3

SubTask run.4

SubTask run.5

?-------- SubTask -----------

?-------- MainTask -----------

MainTask run.1

MainTask run.2

MainTask run.3

MainTask run.4

MainTask run.5

MainTask run.6

MainTask run.7

MainTask run.8

MainTask run.9

MainTask run.10

SubTask run.1

SubTask run.2

SubTask run.3

SubTask run.4

SubTask run.5

?-------- SubTask -----------

?-------- MainTask -----------

MainTask run.1

MainTask run.2

MainTask run.3

MainTask run.4

MainTask run.5

MainTask run.6

MainTask run.7

MainTask run.8

MainTask run.9

MainTask run.10

SubTask run.1

SubTask run.2

SubTask run.3

SubTask run.4

SubTask run.5

? ?

?

热点排行