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

Java線程和Objec之間的不解之緣

編輯:關於JAVA

Java線程在不斷的發展,發展的過程中我們需要不斷的學習相關代碼的知識。下面我們就詳細的看看如何進行相關技術信息的學習。在創建啟動 Java線程之前,先創建一個線程之間競爭使用的Object對象,然後將這個Object對象的引用傳遞給每一個線程對象的lock成員變量。

  這樣一來,每個線程的lock成員都指向同一個Object對象。我們在run方法中,對lock對象使用synchronzIEd塊進行局部 封鎖,這樣就可以讓Java線程去競爭這個唯一的共享的對象鎖,從而實現同步。

  代碼


  1.package com.Vista; 
   2.class MyThread implements Java.lang.Runnable 
  3.{ 
   4.private int threadId; 
  5.private Object lock; 
   6.public MyThread(int id, Object obj) 
  7.{ 
   8.this.threadId = id; 
  9.this.lock = obj; 
  10.} 
   11.@Override 
  12.public void run() 
  13.{ 
   14.synchronized(lock) 
  15.{ 
   16.for (int i = 0; i < 100; ++i) 
  17.{ 
   18.System.out.println("Thread ID: " + this.threadId + " : " + i); 
   19.} 
  20.} 
  21.} 
  22.} 
  23.public class ThreadDemo 
   24.{ 
  25./** 
  26.* @param args 
   27.* @throws InterruptedException 
  28.*/ 
   29.public static void main(String[] args) throws InterruptedException 
   30.{ 
  31.Object obj = new Object(); 
   32.for (int i = 0; i < 10; ++i) 
  33.{ 
   34.new Thread(new MyThread(i, obj)).start(); 
  35.Thread.sleep(1); 
   36.} 
  37.} 
  38.}

  從第二段代碼可知,同步的關鍵是多個Java線程對象競爭同一個共享資源即可,上面的代碼中是通過外部創建共享資源,然後傳遞到Java線程中 來實現。我們也可以利用類成員變量被所有類的實例所共享這一特性,因此可以將lock用靜態成員對象來實現,代碼如下所示:

  代碼

 


  39.package com.Vista; 
   40.class MyThread implements Java.lang.Runnable 
  41.{ 
   42.private int threadId; 
   43.private static Object lock = new Object(); 
   44.public MyThread(int id) 
  45.{ 
  46.this.threadId = id; 
   47.} 
  48.@Override 
  49.public void run() 
  50.{ 
   51.synchronized(lock) 
  52.{ 
   53.for (int i = 0; i < 100; ++i) 
  54.{ 
   55.System.out.println("Thread ID: " + this.threadId + " : " + i); 
   56.} 
  57.} 
  58.} 
  59.} 
  60.public class ThreadDemo 
   61.{ 
  62./** 
  63.* @param args 
   64.* @throws InterruptedException 
  65.*/ 
   66.public static void main(String[] args) throws InterruptedException 
   67.{ 
  68.for (int i = 0; i < 10; ++i) 
  69.{ 
   70.new Thread(new MyThread(i)).start(); 
  71.Thread.sleep(1); 
   72.} 
  73.} 
  74.}

  以上的代碼就是對Java線程的詳細介紹。希望大家有所收獲。

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