Java多線程如何才能協(xié)調(diào)好生產(chǎn)和消費的關(guān)系
Java多線程在使用的時候需要我們主要生產(chǎn)和消費的關(guān)系。只有照顧好了整個關(guān)系才能更好的進行相關(guān)語句的應(yīng)用。下面我們就詳細的看看如何才能理解這個關(guān)系。希望大家有所收獲。
Java多線程:是程序中的一個單一的連續(xù)控制流程,一個線程可以擁有多個線程 。記得剛學(xué)習(xí)Java多線程的時候,對線程中的run()不知道是什么意思,現(xiàn)在大膽認為它就像Java的main()一樣,可以理解為一個線程啟動運行的入口函數(shù)。
創(chuàng)建一個線程的方式有兩種,一種是繼承Thread類,還有就是實現(xiàn)Runnable 接口,兩者都要重寫run。
時間偏分給我們想要執(zhí)行的線程時,可以將該線程的優(yōu)先級設(shè)置Thread.MAX_PRIORITY .下面是一個生產(chǎn)者和消費者的多線程的例子:其規(guī)則很簡單,只有生產(chǎn)出來東西才能有東西來消費。
Java多線程知識點:線程的創(chuàng)建、線程的同步、順便回顧一下大學(xué)的操作系統(tǒng)。
- class Test {
- public static void main(String[] args) {
- Queue q = new Queue();
- Producer p = new Producer(q);
- Consumer c = new Consumer(q);
- p.start();
- c.start();
- }
- }
- class Producer extends Thread {
- Queue q;
- Producer(Queue q) {
- this.q = q;
- }
- public void run() {
- for (int i = 0; i < 10; i++) {
- q.put(i);
- System.out.println("Producer put " + i);
- }
- }
- }
- class Consumer extends Thread {
- Queue q;
- Consumer(Queue q) {
- this.q = q;
- }
- public void run() {
- while (true) {
- System.out.println("Consumer get " + q.get());
- }
- }
- }
- class Queue {
- int value;
- boolean bFull = false;
- public synchronized void put(int i) {
- if (!bFull) {
- value = i;
- bFull = true;
- notify();
- }
- try {
- wait();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public synchronized int get() {
- if (!bFull) {
- try {
- wait();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- bFull = false;
- notify();
- return value;
- }
- }
以上就是對Java多線程相關(guān)問題的介紹。希望大家有所幫助。
【編輯推薦】