程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中線程用法總結

Java中線程用法總結

編輯:關於JAVA

Java中線程用法總結。本站提示廣大學習愛好者:(Java中線程用法總結)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中線程用法總結正文


本文實例總結了Java中線程用法。分享給年夜家供年夜家參考。詳細剖析以下:

1.線程是根本調劑單位。同享過程的資本,如內存和文件句柄。但有本身的pc(法式計數器),stack(線程棧)及當地變量

2.線程的優勢:

a) 充足應用多處置器
b) 可以簡化模子。特定義務給特定線程。如servlets及rmi等框架。
c) 對異步事宜的簡略處置。如socket,nio應用更龐雜。而如今的操作體系支撐更年夜數目的線程。
d) 界面的更佳呼應

3.外部鎖:synchronized塊。互斥。可重入(reentrancy),如許的設計可以免逝世鎖

4.內存可見性:由於編譯器的優化,線程其實不和你看到的一樣。

public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
 public void run() {
  while (!ready)
   Thread.yield();
   System.out.println(number);
  }
}
public static void main(String[] args) {
 new ReaderThread().start();
 number = 42;
 ready=true;
}
}

能夠打印0,或許一向輪回。由於重排序了

5.volatile:可以處理內存可見性,對syncronized機能更佳,但僅此罷了,如不克不及包管a++的原子性

6.溢出(escape):不要在結構函數中將this指針溢出。不要將外部變量溢出,如:

class Test {
private String[] list = new String[] {};
public String[] getList() {return list;}
}

7.線程關閉:把對象關閉在一個線程中,不管對象能否是線程平安的,都能包管線程平安

a) statck限制。即只要當地變量能拜訪該對象。
b)ThreadLocal。

8.弗成變對象。必定是線程平安的。弗成變對象必需知足:

a) 狀況不克不及在創立後修正。
b) 所以的域都是final
c) 准確創立對象,沒有this指針溢出

9.平安宣布

a) 經由過程static初始化對象
b) 應用volatile或AtomicReference
c) 將援用存儲於准確創立的對象的final域
d) 應用鎖

願望本文所述對年夜家的java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved