Java線程和Objec之間的不解之緣
Java線程在不斷的發(fā)展,發(fā)展的過程中我們需要不斷的學習相關代碼的知識。下面我們就詳細的看看如何進行相關技術信息的學習。在創(chuàng)建啟動Java線程之前,先創(chuàng)建一個線程之間競爭使用的Object對象,然后將這個Object對象的引用傳遞給每一個線程對象的lock成員變量。
這樣一來,每個線程的lock成員都指向同一個Object對象。我們在run方法中,對lock對象使用synchronzied塊進行局部封鎖,這樣就可以讓Java線程去競爭這個***的共享的對象鎖,從而實現(xiàn)同步。
代碼
- package com.vista;
- class MyThread implements java.lang.Runnable
- {
- private int threadId;
- private Object lock;
- public MyThread(int id, Object obj)
- {
- this.threadId = id;
- this.lock = obj;
- }
- @Override
- public void run()
- {
- synchronized(lock)
- {
- for (int i = 0; i < 100; ++i)
- {
- System.out.println("Thread ID: " + this.threadId + " : " + i);
- }
- }
- }
- }
- public class ThreadDemo
- {
- /**
- * @param args
- * @throws InterruptedException
- */
- public static void main(String[] args) throws InterruptedException
- {
- Object obj = new Object();
- for (int i = 0; i < 10; ++i)
- {
- new Thread(new MyThread(i, obj)).start();
- Thread.sleep(1);
- }
- }
- }
從第二段代碼可知,同步的關鍵是多個Java線程對象競爭同一個共享資源即可,上面的代碼中是通過外部創(chuàng)建共享資源,然后傳遞到Java線程中來實現(xiàn)。我們也可以利用類成員變量被所有類的實例所共享這一特性,因此可以將lock用靜態(tài)成員對象來實現(xiàn),代碼如下所示:
代碼
- package com.vista;
- class MyThread implements java.lang.Runnable
- {
- private int threadId;
- private static Object lock = new Object();
- public MyThread(int id)
- {
- this.threadId = id;
- }
- @Override
- public void run()
- {
- synchronized(lock)
- {
- for (int i = 0; i < 100; ++i)
- {
- System.out.println("Thread ID: " + this.threadId + " : " + i);
- }
- }
- }
- }
- public class ThreadDemo
- {
- /**
- * @param args
- * @throws InterruptedException
- */
- public static void main(String[] args) throws InterruptedException
- {
- for (int i = 0; i < 10; ++i)
- {
- new Thread(new MyThread(i)).start();
- Thread.sleep(1);
- }
- }
- }
以上的代碼就是對Java線程的詳細介紹。希望大家有所收獲。
【編輯推薦】