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線程的詳細介紹。希望大家有所收獲。