boolean a;
private synchronized void seta(boolean v){a=v;}
private synchronized boolean geta(){return a;}有n个线程可以访问字段a能否改为直接a=v; x.a==.....或者能否改为
private void seta(boolean v){a=v;}
private boolean geta(){return a;}为什么?谢谢

解决方案 »

  1.   

    你已经说了"有n个线程可以访问字段a"你的语气当中好像他们也都要改变a的值,
    所以这里一定要同步,如果不想同步,可以用原子类型.如果去掉了同步,就会发生不可预知的结果,你的程序就不会按照你预想的规则跑了.
      

  2.   

    学习~http://www.ibm.com/developerworks/cn/java/j-jtp11234/index.html
      

  3.   

    http://blog.csdn.net/zhmt/archive/2007/06/08/1643381.aspx
      

  4.   

    我只知道要想同步就必须用到synchronized关键字 但如果改成
    private synchronized void seta(boolean v){a=v;}
    private boolean geta(){return a;}
    不知道可不可以
      

  5.   

    1.
    private synchronized void seta(boolean v){a=v;}
    synchronized 的作用是声明这个方法在同一时间段只许一个线程访问,这要就保证a的值不会同时被多个线程改变(这要会导致a的值无法正确控制)
    2.
    private synchronized boolean geta(){return a;}
    可以不用synchronized,道理同上
      

  6.   

    private boolean geta(){return a;}
    不知道可不可以
    ---------------------------------------------------
    不可以,不能得到最新的数据.
      

  7.   

    不能得到最新的数据这个问题,好象不在32位单核jvm里面出现呀?我还是写不出一个 访问boolean a的线程不安全的程序
      

  8.   

    数据库里面的锁机制不同步就是桩读http://community.csdn.net/Expert/topic/5671/5671526.xml?temp=.7404444
      

  9.   

    class Number1 extends Thread
    { public void run()
    {
    for (int i = 0; i < 10; i++)
    {
    System.out.println("num1");
    try
    {
    sleep(5);
    }
    catch (Exception e)
    { }
    }
    }
    }class Number2 extends Thread
    { public void run()
    {
    for (int i = 0; i < 10; i++)
    {
    System.out.println("num2");
    try
    {
    sleep(5);
    }
    catch (Exception e)
    { }
    }
    }
    }public class MyThread
    { /**
     * @param args
     */
    public static void main(String[] args) throws Exception
    {
    Thread t1 = new Number1();
    Thread t2 = new Number2();
    t1.start();
    t2.start();
    while (true)
    Thread.sleep(2000); }}改成这样就行了
      

  10.   

    使用volatile关键字吧,这是同步简单类型变量的
      

  11.   

    原子类型怎么声明?与synchronized 有什么区别吗?
      

  12.   

    去看java.concrrent包的使用方法
    一般可以用它解决.