问题描述
- 关于多线程问题,请教???
-
public class TestSyncTest {
public static void main(String[] args) {
??TestSync job = new TestSync();
??Thread jia = new Thread(job);
? ?Thread yi = new Thread(job);
? ?jia.setName("甲");
??yi.setName("乙");
? ?jia.start();
??yi.start();
}
}class TestSync implements Runnable {
?private int balance;
?public void run() {
? ?for (int i = 0; i < 30; i++) {
? ??increment();
? ??System.out.println("余额为 :" + balance + "---------"+ Thread.currentThread().getName() +"在操作");
? ?}
}
?public synchronized void increment() {
? ?int i = balance;// 余额
? ?balance = i + 1;?}
}
为什么输出来 并不是同步的
控制台输出结果??????????????
余额为 :1---------甲在操作
余额为 :2---------乙在操作
余额为 :4---------乙在操作
余额为 :5---------乙在操作
余额为 :3---------甲在操作
余额为 :6---------乙在操作
余额为 :7---------甲在操作
余额为 :8---------乙在操作
余额为 :9---------甲在操作
余额为 :11---------甲在操作
余额为 :12---------甲在操作
余额为 :13---------甲在操作
余额为 :14---------甲在操作
余额为 :15---------甲在操作
余额为 :16---------甲在操作
余额为 :17---------甲在操作
余额为 :18---------甲在操作
余额为 :19---------甲在操作
余额为 :20---------甲在操作
余额为 :21---------甲在操作
余额为 :22---------甲在操作
余额为 :23---------甲在操作
余额为 :24---------甲在操作
余额为 :25---------甲在操作
余额为 :26---------甲在操作
余额为 :27---------甲在操作
余额为 :28---------甲在操作
余额为 :29---------甲在操作
余额为 :30---------甲在操作
余额为 :31---------甲在操作
余额为 :32---------甲在操作
余额为 :33---------甲在操作
余额为 :34---------甲在操作
余额为 :35---------甲在操作
余额为 :36---------甲在操作
余额为 :10---------乙在操作
余额为 :37---------乙在操作
余额为 :38---------乙在操作
余额为 :39---------乙在操作
余额为 :40---------乙在操作
余额为 :41---------乙在操作
余额为 :42---------乙在操作
余额为 :43---------乙在操作
余额为 :44---------乙在操作
余额为 :45---------乙在操作
余额为 :46---------乙在操作
余额为 :47---------乙在操作
余额为 :48---------乙在操作
余额为 :49---------乙在操作
余额为 :50---------乙在操作
余额为 :51---------乙在操作
余额为 :52---------乙在操作
余额为 :53---------乙在操作
余额为 :54---------乙在操作
余额为 :55---------乙在操作
余额为 :56---------乙在操作
余额为 :57---------乙在操作
余额为 :58---------乙在操作
余额为 :59---------乙在操作
余额为 :60---------乙在操作
解决方案
甲乙线程各自循环中都在抢increment方法 谁抢到都可能 而且和这个不相关 直接调的打印方法 谁都可能先执行
时间: 2024-09-13 04:51:46