小弟对于synchronized这一概念无法理解,而且也不知道如何使用,有哪位大虾精通的话,指点一下我吧,谢谢。

解决方案 »

  1.   

    对某个对象上锁,用来实现线程安全的东西比如一个静态(全局)变量,有几个线程去读OR写。那么就需要加上synchronized以保证一个时刻内只有一个线程对该变量进行操作(读OR写),保证数据的安全一致
      

  2.   

    //同步的测试----售票系统//class ticket
    {   
    public static void main(String[] args)
    {
    ticketsell t=new ticketsell();
    new Thread(t).start();
    try
    {
    Thread.sleep(20);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    t.b=true;
    new Thread(t).start();
    /*new Thread(t).start();
    new Thread(t).start();*/
    }
    }
    class ticketsell implements Runnable
    {
    static int tickets=100;
    Object o=new Object();
    boolean b=false;
    public void run()
    {
    if(b==false)
    {
    while(true)
    {
    sell();
    }
    }
    else
    {
    while(true)
    {
    synchronized(this)    //同步方法用的this做监视变量,要和同步方法同步,必须用this//
    {
    if(tickets>0)
    {   
    try
    {
    Thread.sleep(10);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    System.out.print("OBJ:"+Thread.currentThread().getName()+"sell:"+tickets+"\n");
    tickets--;
    }
    }
    //sell();
    }
    }
    }
    public synchronized void sell()
    {
    if(tickets>0)
    {   
    try
    {
    Thread.sleep(10);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    System.out.print("Sell:"+Thread.currentThread().getName()+"sell:"+tickets+"\n");
    tickets--;
    }
    }
    }
      

  3.   

    这个东东操作系统里讲的清楚,拥有lock的才能对临界区操作
      

  4.   

    记住synchronized是对共享对象实现原子操作
      

  5.   

    我可不可以理解为synchronized(Object)里面的object起一个标记的作用?如果是标记的话,怎样才会引起加锁和解锁的动作?我有点感觉了,呵呵
      

  6.   

    上面那个大哥写的代码太长,不太好看,我这有个短点的代码,各位能不能帮我分析一下:
    public void run(){     
    for(int i=0;i<1000;i++){
      synchronized(counter){//同步begin
          long v=counter.getCounter();
          System.out.println("inc="+v);
          try{   
            Thread.sleep(1);
            counter.setCounter(v+1);   
          }catch(InterruptedException e){}
      }//同步end
    }
           counter.blnIncStop=true;//结束
    }count是一个对象,只有set(),get()方法
      

  7.   

    synchronized是实现进程共享数据的!当两个进程对同一对象进行操作的时候会有问题的!也就相当于锁,这样可以避免出现问题!
      

  8.   

    java中每个对象都拥有一把锁,synchronized表示试图获取对象锁,获得锁的线程将获得执行