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;}为什么?谢谢
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;}为什么?谢谢
所以这里一定要同步,如果不想同步,可以用原子类型.如果去掉了同步,就会发生不可预知的结果,你的程序就不会按照你预想的规则跑了.
private synchronized void seta(boolean v){a=v;}
private boolean geta(){return a;}
不知道可不可以
private synchronized void seta(boolean v){a=v;}
synchronized 的作用是声明这个方法在同一时间段只许一个线程访问,这要就保证a的值不会同时被多个线程改变(这要会导致a的值无法正确控制)
2.
private synchronized boolean geta(){return a;}
可以不用synchronized,道理同上
不知道可不可以
---------------------------------------------------
不可以,不能得到最新的数据.
{ 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); }}改成这样就行了
一般可以用它解决.