gpt4 book ai didi

java - Java中的多线程具有静态和非静态方法

转载 作者:行者123 更新时间:2023-11-29 05:02:27 27 4
gpt4 key购买 nike

我一直在尝试 java 中多线程的不同行为。如果我在一个类中同时使用同步静态和非静态方法。我的理解是,

-> 如果线程进入同步方法,线程将获取对象的锁,直到方法执行。

-> 如果线程进入静态同步方法,则线程获取类锁而不是对象锁。

真正混淆的部分是输出??。

    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 上的锁,该对象代表定义该方法的类。在这种情况下,synchronized 关键字原则上意味着仅在 static 方法之间进行同步。

而同步实例(非static)方法锁定调用该方法的当前对象Y

因此,同步的 static 方法和同步的实例方法仍然可以交错,因为它们锁定在两个不同的对象上。

关于java - Java中的多线程具有静态和非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com