首页 > 试题广场 >

java用()机制实现了线程之间的同步执行?

[单选题]
java用()机制实现了线程之间的同步执行
  • 监视器
  • 虚拟机
  • 多个CPU
  • 异步调用
推荐
凯头像
我的答案是A  首先jvm中没有进程的概念 ,但是jvm中的线程映射为操作系统中的进程,对应关系为1:1。那这道题的问的就是jvm中线程如何异步执行 。  在jvm中 是使用监视器锁来实现不同线程的异步执行,  在语法的表现就是synchronized  。
编辑于 2015-01-27 15:18:38 回复(12)
A:
The code segments within a program that access the same object from separate, concurrent threads are called “critical sections”。
翻译:在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫”临界区”
怎么解决呢:使用同步的机制对临界区进行保护

同步的两种方式:同步块和同步方法
对于同步来说都是使用synchronized方法
每一个对象都有一个监视器,或者叫做
同步块实例

package ticket; class Tickets { public static void main(String[] args)
    {
        sellTickets st = new sellTickets(); //四个线程同时卖这100张票,注意是同一个对象创建四个线程,他们共享同一个变量ticket new Thread(st).start(); new Thread(st).start(); new Thread(st).start(); new Thread(st).start();
    }
} class sellTickets implements Runnable { int ticket = 100;
    Object o = new Object();
    @Override public void run() { while(true)
        { //每一个对象都有一个监视器,或者叫做锁。同步块示例 synchronized (o) { if(ticket > 0)
                { //存在的隐藏的问题当ticket=1,它的时间片到期了进入到if语句中,第二个线程进入到if语句然后时间片到期 try { //线程睡眠,该方法需要写异常 Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();                    
                    } //第几个线程卖出了第多少张票 System.out.println(Thread.currentThread().getName() + "sell tickets" + ticket);
                    ticket--;
                }
            }
        }
    }
}

编辑于 2015-04-15 11:35:35 回复(8)
题目是不是有问题啊??问的是异步机制,但是答案怎么是同步的??
发表于 2016-06-07 00:53:20 回复(5)
简单来说,监视器用来监视线程进入这个特别房间,他确保同一时间只能有一个线程可以访问特殊房间中的数据和代码。
发表于 2016-02-10 13:44:53 回复(1)

实际上这个考察的是synchronized的原理(深入理解JVM 第二版 P391):


这个是多线程下的单例设计模式:
public class Singleton5 {
    private static Singleton5 instance;
    private Singleton5(){

    }
    public static Singleton5 getInstance(){
        if(instance == null){
            synchronized (Singleton5.class) {
                if(instance == null){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    instance = new Singleton5();
                }
            }
        }
        return instance;
    }
}

对它的.class文件进行反编译:
ublic class com.bigdata.juc.singleton.Singleton5 {
  public static com.bigdata.juc.singleton.Singleton5 getInstance();
    Code:
       0: getstatic     #2                  // Field instance:Lcom/bigdata/juc/singleton/Singleton5;
       3: ifnonnull     51
       6: ldc           #3                  // class com/bigdata/juc/singleton/Singleton5
       8: dup
       9: astore_0
             //反编译后加上了  monitorenter和monitorexit 
     10: monitorenter
      11: getstatic     #2                  // Field instance:Lcom/bigdata/juc/singleton/Singleton5;
      14: ifnonnull     41
      17: ldc2_w        #4                  // long 1000l
      20: invokestatic  #6                  // Method java/lang/Thread.sleep:(J)V
      23: goto          31
      26: astore_1
      27: aload_1
      28: invokevirtual #8                  // Method java/lang/InterruptedException.printStackTrace:()V
      31: new           #3                  // class com/bigdata/juc/singleton/Singleton5
      34: dup
      35: invokespecial #9                  // Method "<init>":()V
      38: putstatic     #2                  // Field instance:Lcom/bigdata/juc/singleton/Singleton5;
      41: aload_0
           //和monitorenter成对出现
     42: monitorexit
      43: goto          51
      46: astore_2
      47: aload_0
          //这个monitorexit防止无法正常释放锁的
     48: monitorexit
      49: aload_2
      50: athrow
      51: getstatic     #2                  // Field instance:Lcom/bigdata/juc/singleton/Singleton5;
      54: areturn

发表于 2019-12-07 15:28:02 回复(0)
题中进程应该改成线程吧,否则是不是要选B
发表于 2016-07-24 14:42:13 回复(2)
题目出错了,应该是线程。
发表于 2017-12-01 16:49:41 回复(0)
监视器:sysnchronized(Object o); o若为普通属性 o就是同步监视器  若为静态属性 则该类为同步监视器 相当于synchronized(O.class)
public synchronized void test(){} 同步监视器为调用该方法的对象
发表于 2016-03-08 15:54:27 回复(0)
这里的监视器也就是synchronized
发表于 2022-04-17 22:57:06 回复(0)
A:
监视器 ”monitor” 是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中, 在语法的表现就是synchronized  。
发表于 2015-10-02 09:57:38 回复(0)
同步监视器就是锁
发表于 2022-05-22 14:57:50 回复(0)
在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫”临界区” 
怎么解决呢:使用同步的机制对临界区进行保护  

同步的两种方式 :同步块和同步方法 
对于同步来说都是使用synchronized方法
每一个对象都有一个 监视器 ,或者叫做
java用 监视器 机制实现了进程之间的异步执行
发表于 2016-12-13 08:32:16 回复(0)
B
虚拟机
发表于 2015-01-18 17:28:07 回复(0)
长见识了
发表于 2021-12-11 17:28:42 回复(0)
发表于 2018-04-18 21:22:40 回复(0)
原来监视器也叫锁,长知识了
发表于 2017-08-26 11:37:13 回复(0)

 3.3223
                                                                                    
发表于 2017-04-12 21:38:17 回复(0)
是7乒乒乓乓去输cvp入GPU888888CCD ccü
发表于 2015-10-15 17:47:54 回复(0)
直接说monitor不就好了,搞得还想什么是监视器。。。准确说应该是线程之间的同步调用
发表于 2015-09-08 18:37:14 回复(1)
答案:B
Java语言是运行在敏感词ava虚拟机平台上的敏感词ava的多进程和多线程机制也是由敏感词ava虚拟机实现的,。因此敏感词ava进程间的异步执行是由敏感词ava虚拟机实现的。
编辑于 2015-08-12 17:45:18 回复(3)