多线程一

 

    首先明确同步的概念,同步可以让线程之间进行互斥访问,并且可以让线程间进行可靠的通讯。

Synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。很多人会理解为同步的概念是一个互斥的方式,但是这个不是同步的全部意义。同步不仅可以阻止线程看到对象处于不一致的状态中,还可以保证进入同步方法或者同步代码块的每一个线程,都看到由同一个锁保护的之前所有的修改效果。

在这里重点理解下可以让线程进行可靠的通讯,还是用一个列子来说明。现在有三个线程,A输出1B输出2C输出3.那么多线程的情况下,按照多线程的原理,输出的是随机的,我们无法知道输出的下一个是什么123?那么,我们现在要编写一个程序,让3个线程按照顺序不断输出 1 2 3 1 2 3…….这就要求三个线程进程可靠的通讯。

 

           public int code;
	public ThreadTest(int code){
		this.code = code;
	}
	private static int TYPE = 1;
	
	private static synchronized void changeType(){
		if(TYPE==3){
			TYPE=1;
		}else{
			TYPE = TYPE+1;
		}
	}
	
	private static synchronized int getType(){
		return TYPE;
	}
	
	public static void main(String[] args) {
		ThreadTest t1 = new ThreadTest(1);
		ThreadTest t2 = new ThreadTest(2);
		ThreadTest t3 = new ThreadTest(3);
		t1.start();
		t2.start();
		t3.start();
	}
	
	@Override
	public void run() {
		while(true){
			if(this.code==getType()){
				System.out.println(this.code);
				changeType();
			}
		}
	}

  

 写方法和读方法都需要被同步,只同步写方法还不够。读和写方法都被同步了,同步才会起作用。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值