[英]MultiTheading in Java having static and non static method
我一直在嘗試java中的多線程的不同行為。 如果我在類中使用同步靜態和非靜態方法。 我所理解的是,
- >如果線程進入同步方法,則線程獲取對象的鎖定,直到執行方法。
- >如果線程進入靜態同步方法,則線程獲取類的鎖而不是對象。
Real confusion部分是輸出??。
package com.threadImplementaion.examples;
class MyRunable implements Runnable
{
public void run()
{
iterationMethod() ;
staticIteration();
}
public synchronized void iterationMethod()
{
//int count = 0 ;
for(int i = 0 ; i < 5; i++ )
{
System.out.println( Thread.currentThread().getName() + " : " + i);
}
}
public static synchronized void staticIteration()
{
for(int i = 0 ; i < 10 ; i++ )
{
System.out.println(Thread.currentThread().getName() + " static " + i);
}
}
}
public class MyRunnable
{
public static void main(String[] args) {
Runnable runnable = new MyRunable() ;
Thread thread1 = new Thread(runnable);
thread1.start();
thread1.setName("Thread1");
Thread thread2 = new Thread(runnable) ;
thread2.start();
thread2.setName("Thread2") ;
Thread thread3 = new Thread(runnable);
thread3.start();
thread3.setName("Thread3");
}
}
Output :
Thread1 : 0
Thread1 : 1
Thread1 : 2
Thread1 : 3
Thread1 : 4
Thread1 static 0
Thread1 static 1
Thread1 static 2
Thread1 static 3
Thread1 static 4
Thread1 static 5
**Thread1 static 6**
Thread3 : 0
Thread3 : 1
Thread3 : 2
Thread3 : 3
Thread3 : 4
Thread2 : 0
Thread2 : 1
Thread1 static 7
Thread2 : 2
Thread1 static 8
Thread2 : 3
Thread1 static 9
Thread2 : 4
Thread2 static 0
Thread2 static 1
Thread2 static 2
Thread2 static 3
Thread2 static 4
Thread2 static 5
Thread2 static 6
Thread2 static 7
Thread2 static 8
Thread2 static 9
Thread3 static 0
Thread3 static 1
Thread3 static 2
Thread3 static 3
Thread3 static 4
Thread3 static 5
Thread3 static 6
Thread3 static 7
Thread3 static 8
Thread3 static 9
同步static
方法獲取Class
對象X
上的鎖定,該對象X
表示定義方法的類。 在這種情況下, synchronized
關鍵字原則上意味着僅在static
方法之間進行同步。
而同步實例(非static
)方法鎖定調用該方法的當前對象Y
因此,同步static
方法和同步實例方法仍然可以交錯,因為它們鎖定了兩個不同的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.