ICTY
2015-06-18 07:39
采纳率: 50%
浏览 1.6k
已采纳

java多线程同步的问题

小测试,如何实现变量ticket的同步

private int ticket = 100;
public void run()
{
    while(ticket > 0 ) {
        System.out.println(ticket+" is saled by "+
                            Thread.currentThread().getName());
        ticket--;
        try
        {
            Thread.sleep(200);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • lhl_lqc 2015-06-18 08:46
    已采纳

    这样写public synchronized void run()
    {
    while(ticket > 0 ) {
    System.out.println(ticket+" is saled by "+
    Thread.currentThread().getName());
    ticket--;
    try
    {
    Thread.sleep(200);
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    }
    }

    或者这样写

    private Object obj = new Object();
    
    public void run() {
        synchronized (obj) {
            while (ticket > 0) {
                System.out.println(ticket + " is saled by "
                        + Thread.currentThread().getName());
                ticket--;
            }
        }
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    点赞 评论
  • jiawei0418 2015-06-18 08:40

    synchronized(我是锁){我是线程;}是要这个么?

    点赞 评论
  • ICTY 2015-06-18 08:51

    我是希望ticket保持同步,也就是多个线程操作同一个ticket变量

    点赞 评论
  • jiawei0418 2015-06-18 08:55

    那就把ticket设置成static的 那样就可以了

    点赞 评论
  • Q40355098 2015-06-18 14:53

    ticket可以做成原子孙,不要用基本类型

    点赞 评论
  • ICTY 2015-06-23 06:13

    想了下,这样不行,我考虑的是两步及多步操作的同步...

    点赞 评论

相关推荐 更多相似问题