gpt4 book ai didi

java - 关于线程同步的几个问题

转载 作者:行者123 更新时间:2023-12-01 15:49:42 25 4
gpt4 key购买 nike

class Q {
int n;
boolean sse = false;
synchronized int get(){
while (!sse)
try{
wait();
}catch(InterruptedException e){
System.out.println("Interrupted Exception Caught");
}
System.out.println("Got :" + n);
sse = false;
notify();
return n;
}
synchronized void put(int n){
while(sse)
try{
wait();
}catch(InterruptedException e){
System.out.println("Caught");
}
this.n = n;
sse = true;
System.out.println("Put :" + n);
notify();
}

}
class Producer implements Runnable{
Q q;
Producer(Q q) {
this.q = q;
new Thread(this, "Prodcuer").start();
}
public void run(){
int i = 0;
while(true) {
q.put(i++);
}
}
}
class Consumer implements Runnable{
Q q;
Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer").start();
}
public void run(){

while(true) {
q.get();
}
}
}
public class Main {


public static void main(String[] args) {
Q q = new Q();
new Producer(q);
new Consumer(q);
System.out.println("Press Control C to stop");
}

}

我有 2 个问题。

Q1。现在wait()函数的定义是这样的:告诉调用线程放弃监视器并进入休眠状态,直到其他线程进入同一监视器并调用notify()。现在,在这个程序中,两个线程(一个与消费者相关,一个与生产者相关)分别在 get 和 put 中使用相同的对象 q 。那么对象 q 是否只存在一个监视器,当任何线程使用涉及 q 的函数时都会进入该监视器?

Q2 这里Consumer要等到Producer通知它,但是Producer也要等到consumer通知它?谁先开始?在输出中,Producer 排在第一位,但是如何呢?

最佳答案

  1. Q 只有一台显示器
  2. Producer 首先启动,因为您首先在 Main 中调用了它的构造函数。

关于java - 关于线程同步的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357152/

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