成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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. /**  
  2. * 生產者消費者問題  
  3. */ 
  4. package com.basic.thread;  
  5. /**  
  6. * @author johnston678  
  7. *  
  8. * @version 2009-05-06  
  9. */ 
  10. public class ProducerConsumer {  
  11.      /**  
  12.       * @param args  
  13.       */ 
  14.      public static void main(String[] args) {          
  15.          ProductBox pb = new ProductBox();  
  16.          Producer p = new Producer(pb);  
  17.          Consumer c = new Consumer(pb);  
  18.           
  19.          Thread pThread = new Thread(p);  
  20.          Thread cThread = new Thread(c);  
  21.          pThread.setPriority(Thread.MAX_PRIORITY);  
  22.           
  23.          pThread.start();  
  24.          cThread.start();  
  25.      }  
  26. }  
  27. /**  
  28. * 產品對象  
  29. * @author johsnton678  
  30. */ 
  31. class Product {  
  32.      int id;  
  33.      public Product(int id) {  
  34.          super();  
  35.          this.id = id;  
  36.      }  
  37.       
  38.      public String toString(){  
  39.          return "Product:" + id;  
  40.      }  
  41. }  
  42. /**  
  43. * 產品盒對象  
  44. * @author johnston678  
  45. */ 
  46. class ProductBox {  
  47.      Product[] productbox = new Product[6];  
  48.      int index = 0;  
  49.      public ProductBox() {  
  50.          super();          
  51.      }  
  52.       
  53.      public synchronized void push(Product p) {  
  54.          while (index == productbox.length) {  
  55.              try {  
  56.                  this.wait();  
  57.              } catch (InterruptedException e) {  
  58.                  // TODO Auto-generated catch block  
  59.                  e.printStackTrace();  
  60.              }  
  61.          }  
  62.          this.notify();          
  63.          productbox[index] = p;  
  64.          index ++;  
  65.      }  
  66.       
  67.      public synchronized Product pop() {  
  68.          while (index == 0) {  
  69.              try {  
  70.                  this.wait();  
  71.              } catch (InterruptedException e) {  
  72.                  // TODO Auto-generated catch block  
  73.                  e.printStackTrace();  
  74.              }  
  75.          }  
  76.          this.notify();  
  77.          index --;  
  78.          return productbox[index];  
  79.           
  80.      }  
  81. }  
  82. /**  
  83. * 生產者  
  84. * @author johnston678  
  85. */ 
  86. class Producer implements Runnable {  
  87.      ProductBox productbox = null;  
  88.       
  89.      public Producer(ProductBox productbox) {  
  90.          super();  
  91.          this.productbox = productbox;  
  92.      }  
  93.      @Override 
  94.      public void run() {  
  95.          // TODO Auto-generated method stub  
  96.          for (int i=0; i<10; i++) {  
  97.              Product p = new Product(i);  
  98.              productbox.push(p);  
  99.              System.out.println("produce:" + p);  
  100.               
  101.              try {  
  102.                  Thread.sleep((int)(Math.random() * 200));  
  103.              } catch (InterruptedException e) {  
  104.                  e.printStackTrace();  
  105.              }  
  106.          }  
  107.      }  
  108.       
  109. }  
  110. /**  
  111. * 消費者  
  112. * @author johnston678  
  113. */ 
  114. class Consumer implements Runnable {  
  115.      ProductBox productbox = null;  
  116.       
  117.      public Consumer(ProductBox productbox) {  
  118.          super();  
  119.          this.productbox = productbox;  
  120.      }  
  121.      @Override 
  122.      public void run() {  
  123.          // TODO Auto-generated method stub  
  124.          for (int i=0; i<10; i++) {  
  125.              Product p = productbox.pop();  
  126.              System.out.println("consume:" + p);  
  127.               
  128.              try {  
  129.                  Thread.sleep((int)(Math.random() * 1000));  
  130.              } catch (InterruptedException e) {  
  131.                  e.printStackTrace();  
  132.              }  
  133.          }  
  134.      }  
  135.       

 

【編輯推薦】

  1. 20個開發人員非常有用的Java功能代碼
  2. 走進Java 7中的模塊系統
  3. JavaFX 1.2 已經發布 主要新功能一覽
  4. 2009年十大Java技術解決方案
  5. 2008最值得學習的五種JAVA技術
責任編輯:仲衡 來源: 小川的博客
相關推薦

2010-03-17 19:24:38

Java多線程循環

2010-01-21 11:27:30

linux多線程機制線程同步

2010-03-16 19:29:26

Java多線程操作

2009-09-02 14:00:34

C#文件處理

2010-03-16 18:40:59

Java多線程編程

2009-07-03 17:18:34

Servlet多線程

2010-03-15 16:31:34

Java多線程

2025-06-25 06:18:46

Linux多線程機制

2023-10-08 09:34:11

Java編程

2023-06-09 07:59:37

多線程編程鎖機制

2009-09-01 17:15:42

C#多線程應用

2010-03-16 17:52:27

Java多線程信號量

2009-03-12 10:52:43

Java線程多線程

2024-07-05 08:32:36

2010-03-16 10:50:21

Java多線程服務器

2021-09-11 15:26:23

Java多線程線程池

2009-06-29 17:49:47

Java多線程

2021-12-26 18:22:30

Java線程多線程

2024-05-06 00:00:01

鎖定機制編程

2024-06-28 08:45:58

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产三级国产aⅴ中文 | 一本久久a久久精品亚洲 | 色资源在线观看 | 中文字幕成人av | 国产一级免费视频 | www.成人在线视频 | 99久热在线精品视频观看 | 成人免费福利视频 | 国产精品视频500部 a久久 | 精品视频在线播放 | 亚洲免费在线 | 日韩一级二级片 | 久久久久国产一区二区三区四区 | 黄网免费 | 51ⅴ精品国产91久久久久久 | 亚洲综合在线视频 | 国产精品无码久久久久 | 国产成人久久 | 欧美成视频在线观看 | 黄网站在线播放 | 国产在线精品一区二区三区 | 成人免费视频网站在线看 | 国产精品国产三级国产aⅴ中文 | 精品国产乱码一区二区三 | 日日天天 | 午夜丰满少妇一级毛片 | av国产精品毛片一区二区小说 | 亚洲自拍一区在线观看 | 久久久久一区二区三区 | 成人区一区二区三区 | 九九热精品视频在线观看 | 亚洲看片网站 | 欧美激情精品久久久久久 | 成人三级影院 | 黄色一级免费看 | 亚洲欧洲成人在线 | 日日骚av| 美女一区 | 搞av.com | 久久成人国产 | av黄色国产 |