当前位置: 首页 > 面试题库 >

同步块/代码Java上的线程访问

滕祯
2023-03-14
问题内容

我正在阅读同步工作。这是示例:

public class Singleton{

private static volatile Singleton _instance;

public static Singleton getInstance(){
   if(_instance == null){
            synchronized(Singleton.class){
              if(_instance == null)
              _instance = new Singleton();
            }
   }
   return _instance;
}

让假定有两个线程AB正在访问getInstance();的方法,如果线程Asynchronized块则线程B将跳过该块,执行下一个块/语句或将等待/阻塞,直到线程A离开
synchronized块。

第二是什么,为什么Singleton.classsynchronized参数中以及什么时候可以null

下面Statement是真的吗?

内在锁在对象上:

class A
{
   public synchronized void method1(){...}
   public synchronized void method2(){...}
}

如果线程A在其中,method1threadB无法输入method2或任何其他同步方法。


问题答案:

1:线程B将等待,直到线程A释放对同步对象的锁定之后,线程A将释放对同步对象的锁定并执行代码。

2:Singleton.class是对象,代表那个类。您正在对其进行同步,因为_instance-object为空。

public synchronized void method1(){...}

在对象上进行同步,在您调用该方法时,这意味着,如果您这样调用它,则2个线程将彼此等待:

final A a = new A();
new Thread(new Runnable(){
    public void run(){
        a.method1();
    }
}).start();
a.method1();

但是如果您在不同的Objects上调用,则两个线程将并行执行:

A a = new A();
final A b = new A();
new Thread(new Runnable(){
    public void run(){
        b.method1();
    }
}).start();
a.method1();

最后一个问题:对,线程B将不会进入方法2,因为同步方法锁定在对象上

顺便说一句。

public synchronized void method1(){...}

等效于:

public void method1(){
    synchronized(this){
        ...
    }
}


 类似资料:
  • 我在读同步工作。下面是一个例子: 假设两个线程 和 正在访问 方法,如果线程 位于块中,则线程 将跳过该块并执行下一个块/语句,或者将等待/阻止,直到线程 离开块。 第二,什么是< code>synchronized参数中的< code>Singleton.class以及它何时可以为< code>null 下面的<code>语句 内部锁位于对象上: 如果线程A位于中,则无法输入或任何其他同步方法。

  • 主要内容:1 什么是Java同步代码块,2 Java同步代码块的要点,3 Java同步代码块的语法,4 Java同步代码块的例子1,5 Java同步代码块的例子21 什么是Java同步代码块 同步代码块可用于对方法的任何特定资源执行同步。 假设您的方法中有50行代码,但是您只想同步5行,则可以使用synchronized代码块。 如果将方法的所有代码放在同步代码块中,它的效果与同步方法相同。 2 Java同步代码块的要点 同步代码块用于锁定任何共享资源的对象。 同步代码块的范围小于该方法。 3 

  • 问题内容: 我正在使用Android App,无法将View与硬件同步。让我解释。 1)我从线程1的run方法中基于数组A中存储的随机值(即随机睡眠)对Android的麦克风进行静音和取消静音。 2)我画出反映麦克风静音的蓝色脉冲。这是通过独立的View类完成的。 3)通过从倒数计时器的onTick内调用,我在上面视图中绘制的图形上移动了一条红线。 我以这种方式一个接一个地启动两个线程: 线程1.

  • 主要内容:1 什么是Java 线程同步,2 为什么使用Java线程同步,3 Java同步类型,4 Java线程同步的类型,5 线程互斥,6 Java锁的概念,7 线程并发问题引发数据不一致,8 Java synchronized方法的例子1,9 Java synchronized方法的例子21 什么是Java 线程同步 Java中的同步是控制多个线程对任何共享资源的访问的能力。 Java同步是更好的选择,我们希望只允许一个线程访问共享资源。 2 为什么使用Java线程同步 Java线程同步主要用

  • 我有3节课是这样的: 来源Java语言 任务Java语言 主要的Java语言 当类源的x等于4时,只有一个任务继续递增x,直到x等于8,我们恢复正常。结果如下: 要获得此结果,我需要修复什么?

  • 本文向大家介绍java 线程同步详细介绍及实例代码,包括了java 线程同步详细介绍及实例代码的使用技巧和注意事项,需要的朋友参考一下 java 线程同步 概要: 为了加快代码的运行速度,我们采用了多线程的方法。并行的执行确实让代码变得更加高效,但随之而来的问题是,有很多个线程在程序中同时运行,如果它们同时的去修改一个对象,很可能会造成讹误的情况,这个时候我们需要用一种同步的机制来管理这些线程。