偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java多線程的相關(guān)機制

開發(fā) 后端
本文講述了Java多線程的相關(guān)機制,分為線程的基本概念、線程的創(chuàng)建和啟動、線程控制的基本方法和線程同步四個方面進行講解。

一 線程的基本概念

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

二 線程的創(chuàng)建和啟動

可以有兩種方式創(chuàng)建新的線程:
***種:
     1.定義線程類實現(xiàn)Runnable接口
     2.Thread myThread = new Thread(target);   //target為Runnable接口類型
     3.Runnable中只有一個方法:public void run();用以定義線程運行體
     4.使用Runnable接口可以為多個線程提供共享的數(shù)據(jù)
     5.在實現(xiàn)Runnable接口的類的run()方法定義中可以使用Thread的靜態(tài)方法public static Thread currentThread();獲取當(dāng)前線程的引用
   
第二種:
      1.可以定義一個Thread的子類并重寫其run方法如:
          class MyThread extends Thread {   
              public void run() {...}
            
          }   
     2.然后生成該類的對象:
         MyThread myThread = new MyThread();

三 線程控制的基本方法

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

四 線程同步

實現(xiàn)生產(chǎn)者消費者問題來說明線程問題,舉例如下所示:

  1. /**  
  2. * 生產(chǎn)者消費者問題  
  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. * 產(chǎn)品對象  
  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. * 產(chǎn)品盒對象  
  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. * 生產(chǎn)者  
  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個開發(fā)人員非常有用的Java功能代碼
  2. 走進Java 7中的模塊系統(tǒng)
  3. JavaFX 1.2 已經(jīng)發(fā)布 主要新功能一覽
  4. 2009年十大Java技術(shù)解決方案
  5. 2008最值得學(xué)習(xí)的五種JAVA技術(shù)
責(zé)任編輯:仲衡 來源: 小川的博客
相關(guān)推薦

2010-03-17 19:24:38

Java多線程循環(huán)

2010-01-21 11:27:30

linux多線程機制線程同步

2009-09-02 14:00:34

C#文件處理

2010-03-16 19:29:26

Java多線程操作

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#多線程應(yīng)用

2010-03-16 17:52:27

Java多線程信號量

2024-07-05 08:32:36

2009-03-12 10:52:43

Java線程多線程

2010-03-16 10:50:21

Java多線程服務(wù)器

2021-09-11 15:26:23

Java多線程線程池

2021-12-26 18:22:30

Java線程多線程

2009-06-29 17:49:47

Java多線程

2024-05-06 00:00:01

鎖定機制編程

2024-06-28 08:45:58

點贊
收藏

51CTO技術(shù)棧公眾號