设为首页 加入收藏

TOP

Java同步机制:synchronized,wait,notify
2015-02-25 16:14:27 来源: 作者: 【 】 浏览:27
Tags:Java 同步 机制 synchronized wait notify

Java同步机制:synchronized,wait,notify



/**
?* 假设A,B两个线程同时运行。但A需要某项前置条件必须满足(data数组装满)后才可以正常运转。 这里让B线程去为满足A的条件去干活。
?*/


public class SYN {
?int[] data = new int[100];


?final Object lock = new Object();


?public SYN() {
? new Thread(new A()).start();
? new Thread(new B()).start();
?}


?private?class A implements Runnable {
? public void run() {
? ?/**
? ? * 因为A需要前置条件(data数据装满)必须得到满足才能运行,所以,在A需要的data数组不满时,先让A等待(实际上是等待B。
? ? * A在等待的同时;B在干活,B装载data数组)
? ? */
? ?synchronized (lock) {
? ? try {
? ? ?System.out.println("A开始等待...");
? ? ?lock.wait();
? ? ?System.out.println("A结束等待!");


? ? ?System.out.println("A前置条件满足,开始做想做的事...");
? ? } catch (Exception e) {
? ? ?e.printStackTrace();
? ? }
? ?}
? }
?}


?private?class B implements Runnable {
? public void run() {
? ?synchronized (lock) {
? ? System.out.println("B开始操作...");
? ? /**
? ? * 这里假设B线程对数组data的数据装载需要费时的操作(如从网络下载)。B先于A,把A需要的数据data装载完毕,然后通知A
? ? */
? ? for (int i = 0; i < 100; i++) {
? ? ?data[i] = i;


? ? ?try {
? ? ? Thread.sleep(10);
? ? ?} catch (Exception e) {
? ? ?}
? ? }
? ? System.out.println("B结束操作!");


? ? lock.notify();
? ? /** 通知A */
? ?}
? }
?}


?public static void main(String[] args) {
? new SYN();
?}
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android通知Notification 下一篇Android判断设备是否打开WIFI、GP..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: