线程

线程同步:协同工作,按预定的先后次序运行。
监视线程:用于监控多个线程运行的情况。就如上级与员工的关系:上级的任务就是监督多个员工工作进度的。
Synchronized:同步关键字。保证同一数据不能同时被两个或多个线程修改。
多个线程执行在同一代码中,但是不能同时运行,可以用同步关键字synchronized,把synchronized放到方法,也可放到代码块中。这时,synchronized的作用就像是一把锁,当第一个线程进入后,synchronized会把标志位置于0,当后面的线程进来时,发现标志位是0而阻塞等待。直到第一个线程运行完成,把标志位置于1,后面的线程才能进入。
注意!!!当synchronized放入代码块中,synchronized的参数是线程共有的东西。
如:在银行取现的例子,不能用同一个账户通过不同的方式同时取现。可用synchronized实现。

wait/notify机制
多线程间的协同工作。如果不满足条件,则wait(),无法继续运行下面的代码。当满足条件条件时,则notify(),线程被唤醒。Wait/notify机制与同步机制密切相关。wait()/notify()必须放在同步锁之内。例如:生产/消费模型可以通过wait/notify机制实现。
//消费者
public void run() {
		synchronized (list) {
			while(true){
	 			if(list.isEmpty()){
	 	 			try {
						list.wait();
					} catch (InterruptedException e) {
	 					e.printStackTrace();
					}
	 	 		 }
	   	 		 Product product = list.remove(0);
	  	 		 System.out.println("消费者消费了一个产品,他的名字是"+ product.getName());
	 	 		list.notify();
	 	 		try {
					sleep(100);
				} catch (InterruptedException e) {
 					e.printStackTrace();
				}
	 		}
		}
 		
//生产者
public void run() {
		synchronized (list) {
			int i = 1;
	 		while(true){
	  			 if(!list.isEmpty()){
	  	 			try {
						 list.wait();
					} catch (InterruptedException e) {
	 					e.printStackTrace();
					}
	 	 		 }
	  	 		 Product product = new Product("IPone"+(i++));
	 	 		 list.add(product);
	  	 		 System.out.println("生产者生产了一个产品,他的名字是"+ product.getName());
	  	 		 System.out.println("KKKKKKKKKKKKK");
	  	 		 list.notify();
	  	 		 try {
					sleep(500);
				} catch (InterruptedException e) {
 					e.printStackTrace();
				}
	 		}
		}
		
如上面的例子:
1. synchronized的参数是线程共有的东西。
2.wait/notify机制是放到同步锁之内。
3.当消费者不满足条件时,则等待,直到生产者改变条件,消费者满足条件时才继续执行。
同理:当生产者不满足条件时,则等待,直到消费者改变条件,生产者满足条件时才继续执行。
4.休眠时间不一致不影响执行的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值