中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多線程的相關機制是什么

發布時間:2021-07-13 14:48:59 來源:億速云 閱讀:165 作者:chen 欄目:編程語言

本篇內容主要講解“Java多線程的相關機制是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java多線程的相關機制是什么”吧!

一 線程的基本概念

線程是一個程序內部的順序控制流.一個進程相當于一個任務,一個線程相當于一個任務中的一條執行路徑.;多進程:在操作系統中能同時運行多個任務(程序);多線程:在同一個應用程序中有多個順序流同時執行;Java的線程是通過java.lang.Thread類來實現的;JVM啟動時會有一個由主方法(public static void main(){})所定義的線程;可以通過創建Thread的實例來創建新的線程;每個線程都是通過某個特定Thread對象所對應的方法run()來完成其操作的,方法run()稱為線程體,通過調用Thread類的start()方法來啟動一個線程。

二 線程的創建和啟動

可以有兩種方式創建新的線程:
***種:
1.定義線程類實現Runnable接口
2.Thread myThread = new Thread(target);   //target為Runnable接口類型
3.Runnable中只有一個方法:public void run();用以定義線程運行體
4.使用Runnable接口可以為多個線程提供共享的數據
5.在實現Runnable接口的類的run()方法定義中可以使用Thread的靜態方法public static Thread currentThread();獲取當前線程的引用

第二種:
1.可以定義一個Thread的子類并重寫其run方法如:
class MyThread extends Thread {   
public void run() {...}

}   
2.然后生成該類的對象:
MyThread myThread = new MyThread();

三 線程控制的基本方法

isAlive():判斷線程是否還"活"著
getPriority():獲得線程的優先級數值
setPriority():設置線程的優先級數值
Thread.sleep():將當前線程睡眠指定毫秒數
join():調用某線程的該方法,將當前線程與該線程"合并",即等待該線程結束,再恢復當前線程的運行
yield():讓出cpu,當前線程進入就緒隊列等待調度
wait():當前線程進入對象的wait pool
notify()/notifyAll():喚醒對象的wait pool中的一個/所有等待線程

四 線程同步

實現生產者消費者問題來說明線程問題,舉例如下所示:

  1. /**  
    * 生產者消費者問題  
    */ 
    package com.basic.thread;  
    /**  
    * @author johnston678  
    *  
    * @version 2009-05-06  
    */ 
    public class ProducerConsumer {  
         /**  
          * @param args  
          */ 
         public static void main(String[] args) {          
             ProductBox pb = new ProductBox();  
             Producer p = new Producer(pb);  
             Consumer c = new Consumer(pb);  
              
             Thread pThread = new Thread(p);  
             Thread cThread = new Thread(c);  
             pThread.setPriority(Thread.MAX_PRIORITY);  
              
             pThread.start();  
             cThread.start();  
         }  
    }  
    /**  
    * 產品對象  
    * @author johsnton678  
    */ 
    class Product {  
         int id;  
         public Product(int id) {  
             super();  
             this.id = id;  
         }  
          
         public String toString(){  
             return "Product:" + id;  
         }  
    }  
    /**  
    * 產品盒對象  
    * @author johnston678  
    */ 
    class ProductBox {  
         Product[] productbox = new Product[6];  
         int index = 0;  
         public ProductBox() {  
             super();          
         }  
          
         public synchronized void push(Product p) {  
             while (index == productbox.length) {  
                 try {  
                     this.wait();  
                 } catch (InterruptedException e) {  
                     // TODO Auto-generated catch block  
                     e.printStackTrace();  
                 }  
             }  
             this.notify();          
             productbox[index] = p;  
             index ++;  
         }  
          
         public synchronized Product pop() {  
             while (index == 0) {  
                 try {  
                     this.wait();  
                 } catch (InterruptedException e) {  
                     // TODO Auto-generated catch block  
                     e.printStackTrace();  
                 }  
             }  
             this.notify();  
             index --;  
             return productbox[index];  
              
         }  
    }  
    /**  
    * 生產者  
    * @author johnston678  
    */ 
    class Producer implements Runnable {  
         ProductBox productbox = null;  
          
         public Producer(ProductBox productbox) {  
             super();  
             this.productbox = productbox;  
         }  
         @Override 
         public void run() {  
             // TODO Auto-generated method stub  
             for (int i=0; i<10; i++) {  
                 Product p = new Product(i);  
                 productbox.push(p);  
                 System.out.println("produce:" + p);  
                  
                 try {  
                     Thread.sleep((int)(Math.random() * 200));  
                 } catch (InterruptedException e) {  
                     e.printStackTrace();  
                 }  
             }  
         }  
          
    }  
    /**  
    * 消費者  
    * @author johnston678  
    */ 
    class Consumer implements Runnable {  
         ProductBox productbox = null;  
          
         public Consumer(ProductBox productbox) {  
             super();  
             this.productbox = productbox;  
         }  
         @Override 
         public void run() {  
             // TODO Auto-generated method stub  
             for (int i=0; i<10; i++) {  
                 Product p = productbox.pop();  
                 System.out.println("consume:" + p);  
                  
                 try {  
                     Thread.sleep((int)(Math.random() * 1000));  
                 } catch (InterruptedException e) {  
                     e.printStackTrace();  
                 }  
             }  
         }  
          
    }

到此,相信大家對“Java多線程的相關機制是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣城市| 时尚| 晴隆县| 丰城市| 宝山区| 龙游县| 曲沃县| 南皮县| 陆河县| 鄱阳县| 达日县| 平阴县| 黄陵县| 南阳市| 汉阴县| 崇明县| 高州市| 勐海县| 江源县| 广汉市| 吐鲁番市| 五河县| 福州市| 浠水县| 余姚市| 图木舒克市| 石柱| 镇沅| 永靖县| 凤山市| 巴马| 年辖:市辖区| 罗山县| 阿拉善右旗| 宜阳县| 寿光市| 防城港市| 遂溪县| 黎城县| 昭苏县| 东兰县|