Java線程在不斷的發展發展的過程中我們需要不斷的學習相關代碼的知識下面我們就詳細的看看如何進行相關技術信息的學習在創建啟動Java線程之前先創建一個線程之間競爭使用的Object對象然後將這個Object對象的引用傳遞給每一個線程對象的lock成員變量
這樣一來每個線程的lock成員都指向同一個Object對象我們在run方法中對lock對象使用synchronzied塊進行局部封鎖這樣就可以讓Java線程去競爭這個唯一的共享的對象鎖從而實現同步
代碼
package comvista;
class MyThread implements javalangRunnable
{
private int threadId;
private Object lock;
public MyThread(int id Object obj)
{
thisthreadId = id;
thislock = obj;
}
@Override
public void run()
{
synchronized(lock)
{
for (int i = ; i < ; ++i)
{
Systemoutprintln(Thread ID: + thisthreadId + : + i);
}
}
}
}
public class ThreadDemo
{
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException
{
Object obj = new Object();
for (int i = ; i < ; ++i)
{
new Thread(new MyThread(i obj))start();
Threadsleep();
}
}
}
從第二段代碼可知同步的關鍵是多個Java線程對象競爭同一個共享資源即可上面的代碼中是通過外部創建共享資源然後傳遞到Java線程中來實現我們也可以利用類成員變量被所有類的實例所共享這一特性因此可以將lock用靜態成員對象來實現代碼如下所示
代碼
package comvista;
class MyThread implements javalangRunnable
{
private int threadId;
private static Object lock = new Object();
public MyThread(int id)
{
thisthreadId = id;
}
@Override
public void run()
{
synchronized(lock)
{
for (int i = ; i < ; ++i)
{
Systemoutprintln(Thread ID: + thisthreadId + : + i);
}
}
}
}
public class ThreadDemo
{
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException
{
for (int i = ; i < ; ++i)
{
new Thread(new MyThread(i))start();
Threadsleep();
}
}
}
以上的代碼就是對Java線程的詳細介紹希望大家有所收獲
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27336.html