为了账号安全,请及时绑定邮箱和手机立即绑定

多线程中关于锁问题

多线程中关于锁问题

package com.multi; public class ThreadTest implements Runnable { private Integer ticket = 10; private Integer count = 0; private byte[] lock = new byte[0]; public void run() { synchronized (ticket) { while (true) { if (ticket <= -100) { break; } System.out.println(String.format("thread: %s , tiketnum = %d do some thing" ,Thread.currentThread().getName() ,ticket--)); count++; } } } public static void main(String[] args) { ThreadTest mTh1 = new ThreadTest(); Thread[] th = new Thread[5]; for (int i = 0; i < 5; i++) { th[i]= new Thread(mTh1,"th"+i); th[i].start(); } try { Thread.sleep(1500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(mTh1.count); } } 执行结果 thread: th4 , tiketnum = 6 do some thing thread: th3 , tiketnum = 7 do some thing thread: th4 , tiketnum = 5 do some thing thread: th3 , tiketnum = 4 do some thing thread: th3 , tiketnum = 2 do some thing thread: th4 , tiketnum = 3 do some thing thread: th4 , tiketnum = 0 do some thing thread: th4 , tiketnum = -1 do some thing thread: th4 , tiketnum = -2 do some thing thread: th4 , tiketnum = -3 do some thing thread: th4 , tiketnum = -4 do some thing thread: th4 , tiketnum = -5 do some thing thread: th4 , tiketnum = -6 do some thing thread: th4 , tiketnum = -7 do some thing thread: th4 , tiketnum = -8 do some thing thread: th1 , tiketnum = 9 do some thing …………………… …………java多线程中,锁不起作用?
查看完整描述

4 回答

?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

synchronized (ticket) ,改为 synchronized (lock) 

查看完整回答
3 反对 回复 2016-05-10
?
竹马君

TA贡献64条经验 获得超115个赞

关键在
System.out.println(String.format("thread: %s , tiketnum = %d do some thing",Thread.currentThread().getName(),ticket--));

如果将ticket--移出来,改写成
System.out.println(String.format("thread: %s , tiketnum = %d do some thing",Thread.currentThread().getName(),ticket));
ticket--;
输出就正常了
thread: th0 , tiketnum = 10 do some thing
thread: th0 , tiketnum = 9 do some thing
thread: th0 , tiketnum = 8 do some thing
thread: th0 , tiketnum = 7 do some thing
thread: th0 , tiketnum = 6 do some thing
thread: th0 , tiketnum = 5 do some thing
thread: th0 , tiketnum = 4 do some thing
thread: th0 , tiketnum = 3 do some thing
thread: th0 , tiketnum = 2 do some thing
thread: th0 , tiketnum = 1 do some thing
thread: th0 , tiketnum = 0 do some thing
thread: th0 , tiketnum = -1 do some thing

查看完整回答
2 反对 回复 2016-05-10
  • 4 回答
  • 0 关注
  • 3227 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信