论坛首页 Java企业应用论坛

在java中线程-线程的互斥技术的Demo

浏览 1442 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-11  
在java中线程-线程的互斥技术的Demo,代码如下:

public class TraditionalThreadSynchronized {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TraditionalThreadSynchronized().init();
	}

	private void init(){
		/**内部类不能访问局部变量,所以这里要用final*/
		final Outputer outputer = new Outputer();
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(true){	
					try {
						Thread.sleep(5);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					outputer.output("GavinlinHere");
				}	
				
			}
		}).start();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(true){	
					try {
						Thread.sleep(5);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					outputer.output("JiaoZhaoHere");
				}	
				
			}
		}).start();
	}
	
	static class Outputer{
		private String name;
		
		/**
		 * 可以与outputsync同步,不可与static的同步
		 * @param name
		 */
		public void output(String name){
			this.name = name;
			int len = this.name.length();
			synchronized(this){
				for(int i = 0;i < len; i++){
					System.out.print(this.name.charAt(i));
				}
				System.out.println();
			}	
		}
		
		public synchronized void outputsync(String name){
			this.name = name;
			int len = this.name.length();
			for(int i = 0;i < len; i++){
				System.out.print(this.name.charAt(i));
			} 
			
			System.out.println();
		}
		
		/**
		 * 若想与output同步,必须output的锁为Outputer.class
		 * @param name
		 */
		public static synchronized void sOutputSync(String name){
	
			int len = name.length();
			for(int i = 0;i < len; i++){
				System.out.print(name.charAt(i));
			}
			System.out.println();
		}
	}
}
   发表时间:2011-11-13  
低端了点低端了点
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics