java中 synchronized同步处理后 为什么只有一个线程在运行

packagecom.java.zuoye;importjava.util.Random;classThreadSalesimplementsRunnable{publi... package com.java.zuoye;

import java.util.Random;

class ThreadSales implements Runnable {
public synchronized void get() {
int num = 0;
for (int i = 1; i <= 1000; i++) {
if (num < 2000) {
Random random = new Random();
int price = random.nextInt(101);
num = price + num;
System.out.println(Thread.currentThread() + "赚了" + price + ",总共" + num);
} else {
System.out.println("赚钱结束");
System.exit(0);
}
try {
Thread.sleep((int) (1000 * Math.random()));
} catch (Exception e) {

}
}
}

public void run() {

while (true) {
get();
}

}
}

public class zuoye11_01 {

public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadSales num = new ThreadSales();
Thread t1 = new Thread(num, "小明");
Thread t2 = new Thread(num, "小花");
Thread t3 = new Thread(num, "小军");
t1.start();
t2.start();
t3.start();
}

}
展开
 我来答
乐观且热烈的小闺秀8361
2019-05-26 · TA获得超过3490个赞
知道大有可为答主
回答量:6394
采纳率:80%
帮助的人:691万
展开全部
java中 synchronized同步处理后,代表该线程是同步的,即多线程访问时,无法同时有两个或以上线程进行访问。具体的原理是,当第一个线程进入该同步代码块之后,会暂时获得同步块的锁,当第二个线程进入时,由于第一个线程并未结束,同步代码块的锁没有释放,所以第二个线程进不来,达到只有一个线程在运行的目的。synchronized同步处理通常用于封装需要共享的可改变的数据,为了让数据更安全所使用的技术。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式