Java線程經常使用方法詳解

 

  線程的經常使用方法java

  1start() : 線程調用該方法將啓動線程,使之重新建狀態進入就緒隊列排隊,一旦輪到它來享用CPU資源時,就能夠脫離建立它的線程獨立開始本身的生命週期了。多線程

  2run(): Thread類的run()方法與Runnable接口中的run()方法的功能和做用相同,都用來定義線程對象被調度以後所執行的操做,都是系統自動調用而用戶程序不得引用的方法。app

  3sleep(int millsecond): 優先級高的線程能夠在它的run()方法中調用sleep方法來使本身放棄CPU資源,休眠一段時間。ide

  4isAlive(): 線程處於新建狀態時,線程調用isAlive()方法返回false。在線程的run()方法結束以前,即沒有進入死亡狀態以前,線程調用isAlive()方法返回true.spa

  5currentThread():該方法是Thread類中的類方法,能夠用類名調用,該方法返回當前正在使用CPU資源的線程。線程

  6interrupt() :一個佔有CPU資源的線程可讓休眠的線程調用interrupt()方法吵醒本身,即致使休眠的線程發生InterruptedException異常,從而結束休眠,從新排隊等待CPU資源。對象

  線程同步blog

  在處理多線程問題時,咱們必須注意這樣一個問題:當兩個或多個線程同時訪問同一個變量,而且一個線程須要修改這個變量。咱們應對這樣的問題做出處理。接口

  所謂線程同步就是若干個線程都須要使用一個synchronized修飾的方法.即程序中的若干個線程都須要使用一個方法,而這個方法用synchronized給予了修飾。生命週期

  多個線程調用synchronized方法必須遵照同步機制:當一個線程使用這個方法時,其餘線程想使用這個方法時就必須等待,直到線程使用完該方法。在使用多線程解決許多實際問題時,可能要把某些修改數據的方法用關鍵字synchronized來修飾。

  示例

  建立主類Demo45

  Bank.java

  public class Bank implements Runnable { //實現接口

  int money; //定義變量

  public void setMoney(int n) {

  money = n; //設置初始值

  }

  @Override

  public void run() { //重寫方法

  if (Thread.currentThread().getName().equals("會計")) {

  saveOrTake(300);

  } else if (Thread.currentThread().getName().equals("出納")) {

  saveOrTake(150);

  }

  }

  public synchronized void saveOrTake(int m) { //作個修飾

  if (Thread.currentThread().getName().equals("會計")) {

  for (int i = 0; i < 3; i++) { //分三次存

  money = money+m/3;

  System.out.println(Thread.currentThread().getName()+"存入"+m/3+",帳上還有"+money+",休息一下子再存"); //打印每次存的數量

  try {

  Thread.sleep(1000); //休息1

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  } else if (Thread.currentThread().getName().equals("出納")) {

  for (int i = 0; i < 3; i++) {

  money = money-m/3;

  System.out.println(Thread.currentThread().getName()+"取出"+m/3+",帳上還有"+money+",休息一下子再取");

  try {

  Thread.sleep(1000);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  }

  }

  }

  Demo45.java

  public class Demo45 {

  public static void main(String[] args) {

  Bank bank = new Bank(); //建立對象

  bank.setMoney(200); //初始200

  System.out.println("銀行帳上還有200");

  Thread accountant = new Thread(bank); //把目標對象bank傳進去

  accountant.setName("會計");

  Thread cashier = new Thread(bank);

  cashier.setName("出納");

  accountant.start();

  cashier.start();

  }

  }

  運行結果

 

 

原文連接:http://www.maiziedu.com/wiki/java/approach/

相關文章
相關標籤/搜索