多线程访问同一资源第二步 : 线程设置 以及 线程打印 用synchronized解决数据不匹配问题

package cn.sdut.threadclass;
/*
 * 
 *             多线程访问同一资源第二步 : 线程设置 以及线程 线程打印   用synchronized
 * 两个线程
 *  一个线程输入  
 *  另一个线程打印
 *              但是没有实现  输入一个  打印一个的效果
 */

class Person1{
	private String name;
	private char sex;
	
	
	public synchronized void setAttribute(String name , char sex){   //可以去掉 synchronized 查看效果
		this.name = name;
		try {
			Thread.sleep(100); //让线程睡眠 更容易看出问题
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.sex  = sex;
	}
	
	public synchronized void printAttribute(){                      //  可以去掉 synchronized 查看效果
		try {
			Thread.sleep(100); //让线程睡眠 更容易看出问题
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(this.name +"    "+this.sex);
	}
	
}

class  In implements Runnable {

	private Person1 person  = null;
	public In(Person1 person){
		this.person = person;
	}
	@Override
	public void run() {
		for(int i = 0;i<500;i++){
			if(i%2==0){
				person.setAttribute("柯南", '男');
			}else{
				person.setAttribute("少司命", '女');
			}
		}
		
	}
	
}
class  Out implements Runnable {

	private Person1 person  = null;
	public Out(Person1 person){
		this.person = person;
	}
	@Override
	public void run() {
		for(int i = 0;i<500;i++){
			person.printAttribute();
		}
		
	}
	
}

public class ThreadDemo02 {

	public static void main(String[] args) {
		Person1 person = new Person1();//建立共享
		In in = new In(person);
		Out out = new Out(person);
		Thread t1 = new Thread(in);
		Thread t2 = new Thread(out);
		t1.start();
		t2.start();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值