java中Synchronized的一个简单例子

1.    多线程例子如下:

package com.jzm.multithreading;

public class  AlwaysEven {
	private int i=0;
	
	public  void next(){ 
		i++; 
		i++;
	}
	public  int  getValue()
	{
		 return i;
	}

	public static void main(String[] args) {
	
	final AlwaysEven ae =  new AlwaysEven();
	
	 new Thread("Watcher"){	
	
	    public void run() {
	
		while(true) {
		
	int  val = ae.getValue();
	
	if(val % 2 != 0) {
	    System.out.println(val);
	    System.exit(0);
	    }
	 }
	}//end run
	}.start();

	while(true)
		ae.next();
	}
	}


结果:打印出一个奇数!!原因是没有锁定同步。

 

 

2. 下面引入同步机制。

 

package com.jzm.multithreading;

public class  AlwaysEven {
	private int i=0;
	
	public synchronized void next(){ 
		i++; 
		i++;
	}
	public synchronized int  getValue()
	{
		 return i;
	}

	public static void main(String[] args) {
	
	final AlwaysEven ae =  new AlwaysEven();
	
	 new Thread("Watcher"){	
	
	    public void run() {
	
		while(true) {
		
	int  val = ae.getValue();
	
	if(val % 2 != 0) {
	    System.out.println(val);
	    System.exit(0);
	    }
	 }
	}//end run
	}.start();

	while(true)
		ae.next();
	}
	}


 

3.  总结: Synchronized中间内嵌了信号量,从而实现了资源同步。

你可能感兴趣的:(java,thread,多线程,String,Class)