java线程混乱错位_Java线程混乱,为什么输出没有排序?

看看输出,尽管使方法同步,输出没有排序。由于两个线程在堆上增加相同的对象“作业”,无论哪个线程打印该线,结果都应该是增加的值。但为什么它无序地打印?Java线程混乱,为什么输出没有排序?

class TestSync implements Runnable{

private int balance;

public void run(){

for(int i=0; i<50; i++) {

increment();

System.out.println("balance is "+balance);

}

}

public synchronized void increment(){

balance++;

}

}

public class TestSyncTest {

public static void main(String[] args){

TestSync job = new TestSync();

Thread a = new Thread(job);

Thread b = new Thread(job);

a.start();

b.start();

}

}

输出:

balance is 2

balance is 3

balance is 4

balance is 5

balance is 6

balance is 7

balance is 8

balance is 9

balance is 10

balance is 11

balance is 12

balance is 13

balance is 14

balance is 15

balance is 16

balance is 17

balance is 18

balance is 19

balance is 20

balance is 21

balance is 22

balance is 23

balance is 24

balance is 2

balance is 25

balance is 27

balance is 28

balance is 29

balance is 26

balance is 30

balance is 32

balance is 33

balance is 34

balance is 35

balance is 36

balance is 37

balance is 31

balance is 38

balance is 40

balance is 41

balance is 42

balance is 43

balance is 44

balance is 39

balance is 46

balance is 47

balance is 45

balance is 49

balance is 48

balance is 50

balance is 52

balance is 51

balance is 53

balance is 55

balance is 54

balance is 56

balance is 58

balance is 59

balance is 60

balance is 57

balance is 61

balance is 62

balance is 63

balance is 64

balance is 65

balance is 66

balance is 67

balance is 68

balance is 69

balance is 70

balance is 71

balance is 72

balance is 73

balance is 74

balance is 75

balance is 76

balance is 77

balance is 78

balance is 79

balance is 80

balance is 81

balance is 82

balance is 83

balance is 84

balance is 85

balance is 86

balance is 87

balance is 88

balance is 89

balance is 90

balance is 91

balance is 92

balance is 93

balance is 94

balance is 95

balance is 96

balance is 97

balance is 98

balance is 99

balance is 100

2016-04-09

Anudeep

+0

'synchronized'不承诺订单。它更多的是关于不同线程在代码块上执行的操作的可见性和操作的原子性。这就是为什么。 –

+0

@Tirath [如果方法调用可以正确排列,保持不重合的调用的相互顺序,而不管线程调用哪个调用,那么执行是非常一致的。换句话说,在方法返回之前,它会与其他线程完全一致地生效。这也被称为'linearizability'或'线程安全'。](http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/88)。我猜这是java的'synchronized'。所以,订单是否得到保证,取决于你的意思。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值