第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用線程鎖定系統(tǒng)的偶數(shù)奇數(shù)

使用線程鎖定系統(tǒng)的偶數(shù)奇數(shù)

慕哥6287543 2021-04-25 10:05:30
今天,我在Thread上進行了一些練習,并試圖創(chuàng)建一個偶數(shù)奇數(shù)程序。我使用同步創(chuàng)建了它,并且運行良好。但是,當我嘗試使用Lock進行相同的操作時,我就卡住了。以下是我嘗試執(zhí)行的代碼。public class OddEvenNumberThreadLock {public static void main(String args[]) {    SharedObject sharedObject = new SharedObject();    Thread evenThread = new Thread(new EvenNumber(sharedObject));    Thread oddThread = new Thread(new OddNumber(sharedObject));    evenThread.start();    oddThread.start();}} class EvenNumber implements Runnable {SharedObject object;public EvenNumber(SharedObject object) {    this.object = object;}@Overridepublic void run() {    for (int i = 0; i <= 100; i = i + 2) {        while (!object.isOdd()) {            object.getLock().lock();            try {                System.out.println("Even : " + i);                object.setOdd(true);            } catch (Exception e) {                e.printStackTrace();            } finally {                object.getLock().unlock();            }        }    }}}class OddNumber implements Runnable {SharedObject object;public OddNumber(SharedObject object) {    this.object = object;}@Overridepublic void run() {    for (int i = 1; i <= 100; i = i + 2) {        while (object.isOdd()) {            object.getLock().lock();            try {                System.out.println("Odd : " + i);                object.setOdd(false);            } catch (Exception e) {                e.printStackTrace();            } finally {                object.getLock().unlock();            }        }    }}}class SharedObject {private Lock lock;private boolean isOdd;public SharedObject() {    this.lock = new ReentrantLock();}public boolean isOdd() {    return isOdd;}public void setOdd(boolean isOdd) {    this.isOdd = isOdd;}public Lock getLock() {    return lock;}public void setLock(Lock lock) {    this.lock = lock;}}我還有一個問題,例如在同步的情況下,我們使用notify方法來通知其他線程。在Lock的情況下,我們如何實現(xiàn)這一目標。
查看完整描述

1 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

據(jù)我所知,您要實現(xiàn)自己的兩個線程以乒乓方式打印偶數(shù)和奇數(shù)。您想要的行為ReentrantLock比使用synchronizedblock更容易實現(xiàn),因為synchronized它總是不公平的,但是您可以ReentrantLock使用適當?shù)臉嬙旌瘮?shù)使行為更加公平。這是Locks程序的外觀:


public class App {


    public static void main(String args[]) {


        SharedObject sharedObject = new SharedObject();


        Thread evenThread = new Thread(new EvenNumber(sharedObject));

        Thread oddThread = new Thread(new OddNumber(sharedObject));


        evenThread.start();

        oddThread.start();

    }


}



class EvenNumber implements Runnable {

    SharedObject object;


    public EvenNumber(SharedObject object) {

        this.object = object;

    }


    public void run() {

        int i = 0;

        while(i <= 100) {

            object.getLock().lock();

            try {

                if (!object.isOdd()) {

                    System.out.println("Even : " + i);

                    i = i + 2;

                    object.setOdd(true);

                }

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                object.getLock().unlock();


            }

        }

    }

}


class OddNumber implements Runnable {

    SharedObject object;


    public OddNumber(SharedObject object) {

        this.object = object;

    }


    public void run() {

        int i = 1;

        while(i <= 100) {


            object.getLock().lock();

            try {

                if(object.isOdd()) {

                    System.out.println("Odd : " + i);

                    i = i + 2;

                    object.setOdd(false);

                }

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                object.getLock().unlock();


            }


        }


    }

}


class SharedObject {

    private Lock lock;

    private boolean isOdd;


    public SharedObject() {

        this.lock = new ReentrantLock(true);


    }


    public boolean isOdd() {

        return isOdd;

    }


    public void setOdd(boolean isOdd) {

        this.isOdd = isOdd;

    }


    public Lock getLock() {

        return lock;

    }


    public void setLock(Lock lock) {

        this.lock = lock;

    }


}



查看完整回答
反對 回復 2021-05-12
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號