您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“java線程的應用場景有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java線程的應用場景有哪些”這篇文章吧。
解決生產者,消費者存在問題,可使用如下方法(代碼示例包含):
1. 解決數據同步問題:使用同步代碼塊;
2. 解決重復問題:
加入等待與喚醒機制-->由Object類提供方法:
等待:public final void wait() throws InterruptedException
喚醒第一個等待線程:public final void notify();
喚醒全部等待線程:public final void notifyAll();
代碼示例:
** * 生產者消費者實體 * YangKuo 2018/11/15 18:21 */ public class Info { private String title; private String content; /** * flag=true 表示可以生產,但不能取走 * flag=false 表示不能生產,可以取走 */ private Boolean flag = true; public synchronized void setInfo(String title, String content) throws InterruptedException { if (!flag) {//此時不能夠進行生產,等待取走 super.wait(); } Thread.sleep(100); this.title = title; this.content = content; flag = false;//生產完成 super.notify(); } public synchronized void getInfo() throws InterruptedException { if (flag) {//此時應該生產,不應該取走 super.wait();//等待 } Thread.sleep(100); System.out.println(this.title + "----->" + this.content); flag = true;//消費完成 super.notify(); } } /** * 生產者 * YangKuo 2018/11/15 18:26 */ public class Producer implements Runnable { private Info info; public Producer(Info info) { this.info = info; } @Override public void run() { for (int x = 0; x < 50; x++) { if (x % 2 == 0) { try { info.setInfo("張三","一個帥哥"); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { info.setInfo("小白兔","一個可愛的小動物"); } catch (InterruptedException e) { e.printStackTrace(); } } } } } /** * 消費者 * YangKuo 2018/11/15 18:26 */ public class Customer implements Runnable { private Info info; public Customer(Info info) { this.info = info; } @Override public void run() { for (int x = 0; x < 50; x++) { try { info.getInfo(); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 生產者,消費者測試 * YangKuo 2018/11/15 18:35 */ public class Test { public static void main(String args[]) { Info info = new Info(); Producer p = new Producer(info); Customer c = new Customer(info); new Thread(p).start(); new Thread(c).start(); } }
補充:wait()與Sleep方法的區別
wait(): Object類定義的方法,表示線程要等待執行,必須通過notify(),notifyAll()方法喚醒
Sleep(): 是Thread類定義的方法,在休眠到一定時間后將自己喚醒。
以上是“java線程的應用場景有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。