<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    brand new start

    常用鏈接

    統(tǒng)計(jì)

    最新評論

    2012年6月14日 #

    java 多線程

    生產(chǎn)消費(fèi)例子:
    用synchronized:
    class Resource{
        
    private String name;
        
    private int count = 0;
        
    private boolean flag = true;
        
    public synchronized void set(String name){
            
    while(!flag){
                
    try {
                    wait();
                } 
    catch (InterruptedException e) {
                
    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
    if(flag){
                
    this.name = name;
                System.out.println(Thread.currentThread().getName()
    +"   生產(chǎn)了    "+name+""+(++count));
                
            }
            flag 
    = false;
            notifyAll();
        }
        
    public synchronized void get(){
            
    while(flag){
                
    try {
                    wait();
                } 
    catch (InterruptedException e) {
                    
    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
    if(!flag){
                System.out.println(Thread.currentThread().getName()
    +"   消費(fèi)了    "+name+""+count);
                
            }
            flag 
    = true;
            notifyAll();
        }
    }

    class Producer implements Runnable{
        
    private Resource r;
        Producer(Resource r){
            
    this.r = r;
        }
        
    public void run(){
            
    while(true){
                r.set(
    "Tom");
            }
        }
        
    }

    class Consumer implements Runnable{
        
    private Resource r;
        Consumer(Resource r){
            
    this.r = r;
        }
        
    public void run(){
            
    while(true){
                r.get();
            }
        }
        
    }

    public class TradeDemo {
        
    public static void main(String[] args){
            Resource res 
    = new Resource();
            Producer p 
    = new Producer(res);
            Consumer c 
    = new Consumer(res);
            Thread t1 
    = new Thread(p);
            Thread t2 
    = new Thread(p);
            Thread t3 
    = new Thread(c);
            Thread t4 
    = new Thread(c);
            t1.start();
            t2.start();
            t3.start();
            t4.start();
        }
    }
    用Lock:
    import java.util.concurrent.locks.*;

    import org.junit.Test;

    class Resources {
        
    private String name;
        
    private int count = 0;
        
    private boolean flag = true;
        
    private Lock lock = new ReentrantLock();
        
    private Condition condition_pro = lock.newCondition();
        
    private Condition condition_con = lock.newCondition();

        
    public void set(String name) {
            lock.lock();
            
    try {
                
    while (!flag) {
                    condition_pro.await();
                }
                
    if (flag) {
                    
    this.name = name;
                    System.out.println(Thread.currentThread().getName()
                            
    + "   生產(chǎn)了    " + name + "" + (++count));

                }
                flag 
    = false;
                condition_con.signal();
            } 
    catch (InterruptedException e) {
                System.out.println(
    "生產(chǎn)exception");
            } 
    finally {
                lock.unlock();
            }
        }

        
    public void get() {
            lock.lock();
            
    try {
                
    while (flag) {
                    condition_con.await();
                }
                
    if (!flag) {
                    System.out.println(Thread.currentThread().getName()
                            
    + "   消費(fèi)了    " + name + "" + count);

                }
                flag 
    = true;
                condition_pro.signal();
            } 
    catch (InterruptedException e) {
                System.out.println(
    "消費(fèi)exception");
            } 
    finally {
                lock.unlock();
            }
        }
    }

    class Producers implements Runnable {
        
    private Resources r;

        Producers(Resources r) {
            
    this.r = r;
        }

        
    public void run() {
            
    while (true) {
                r.set(
    "Tom");
            }
        }

    }

    class Consumers implements Runnable {
        
    private Resources r;

        Consumers(Resources r) {
            
    this.r = r;
        }
        @Test
        
    public void run() {
            
    while (true) {
                r.get();
            }
        }

    }

    public class TradeDemo2 {
        
    public static void main(String[] args) {
            Resources res 
    = new Resources();
            Producers p 
    = new Producers(res);
            Consumers c 
    = new Consumers(res);
            Thread t1 
    = new Thread(p);
            Thread t2 
    = new Thread(p);
            Thread t3 
    = new Thread(c);
            Thread t4 
    = new Thread(c);
            t1.start();
            t2.start();
            t3.start();
            t4.start();
        }
    }
    Dead lock:
    public class DeadLockThread implements Runnable{
        
    private int tickets = 100;
        
    private boolean flag;
        DeadLockThread(
    boolean flag){
            
    this.flag = flag;
        }
        
    public void run(){
            
    while(tickets>0){
                
    if(flag){
                    
    synchronized(MyLock.locka){
                        System.out.println(
    "if locka");
                        
    synchronized(MyLock.lockb){
                            System.out.println(Thread.currentThread().getName()
    +"..true.."+"if lockb  "+tickets--);
                        }
                    }
                }
                
    else{
                    
    synchronized(MyLock.lockb){
                        System.out.println(
    "else lockb");
                        
    synchronized(MyLock.locka){
                            System.out.println(Thread.currentThread().getName()
    +"..false.."+"else lockb  "+tickets--);
                        }
                    }
                }
            }
        }
        
    }

    class MyLock{
        
    static Object locka = new Object();
        
    static Object lockb = new Object();
    }

    posted @ 2012-06-14 17:12 Nemo_blinker 閱讀(1027) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲私人无码综合久久网| 亚洲热妇无码AV在线播放| 亚洲另类古典武侠| 99ee6热久久免费精品6| 亚洲中字慕日产2020| 国产成人亚洲精品| 国产免费的野战视频| 亚洲AV无码国产精品色| 天天影视色香欲综合免费| 亚洲AV综合色区无码二区偷拍| 在线永久免费的视频草莓| 亚洲日本人成中文字幕| 日韩一级视频免费观看| 猫咪免费观看人成网站在线| 亚洲色欲久久久久综合网| 亚洲xxxx18| 日本特黄a级高清免费大片| 成人婷婷网色偷偷亚洲男人的天堂| 97无码免费人妻超级碰碰碰碰 | 亚洲日本在线观看| 男女猛烈xx00免费视频试看| 免费真实播放国产乱子伦| 曰韩无码AV片免费播放不卡| 亚洲国产精品国自产拍AV| 3344免费播放观看视频| 亚洲一区二区三区在线观看网站| 国产极品美女高潮抽搐免费网站| 国产成人无码精品久久久免费| 亚洲色成人网站WWW永久| 亚洲精品视频免费在线观看| 亚洲国产成人久久一区二区三区| 免费一级做a爰片性色毛片| 在线免费播放一级毛片 | 拔擦拔擦8x华人免费久久| 一区免费在线观看| 久久久亚洲欧洲日产国码农村| 野花高清在线观看免费完整版中文 | 免费无码H肉动漫在线观看麻豆| 亚洲人成电影在线观看青青| 免费a级毛片网站| 91福利免费体验区观看区|