多线程笔记1

7 篇文章 0 订阅
2 篇文章 0 订阅
本文通过两个Java示例展示了线程间的同步操作:第一个示例使用传统的wait()和notify()方法实现线程间的交替执行;第二个示例则利用Java 5中引入的Lock和Condition来完成类似的功能。
摘要由CSDN通过智能技术生成
使用thread

package Thread.deng;

public class duida  {
	
	public static void main(String[] args) {
		new duida().ini();
	}
	
	public void ini(){
		final pingtai p = new pingtai();
		new Thread(new Runnable(){
			public void run(){
				for(int i=0;i<10;i++){
					p.ldz();
				}
				
			}
			
		}){}.start();
		for(int i=0;i<10;i++){
			p.zdl();
		}
	}
	
	private class pingtai{
	
	boolean is = true;
	
	public synchronized void zdl(){
		if(is){
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		for(int i=0;i<2;i++){
			System.out.println("张三攻击了李四,连击"+i);
		}
		is = true;
		this.notify();
	}
	

	public synchronized void ldz(){
		if(!is){
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		for(int i=0;i<2;i++){
			System.out.println("李四攻击了张三,连击"+i);
		}
		is = false;
		this.notify();
	}
		
		
	}
}



使用javaJDK5以上自带


package Thread.deng;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Jdk5Thread {
	private static Lock lock = new ReentrantLock();
	private static Condition subThreadCondition = lock.newCondition();
	private static boolean bBhouldSubThread = false;
	
	public static void main(String[] args) {
		ExecutorService threadPool = Executors.newFixedThreadPool(3);
		
		threadPool.execute(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				for(int i=0;i<10;i++){
					lock.lock();
					
					try{
						if(!bBhouldSubThread){
							subThreadCondition.await();
							
							for(int j=0;j<2;j++){
								System.out.println("sdsdfsdfsdf");
							}
							bBhouldSubThread = false;
							subThreadCondition.signal();
						}
					}catch(Exception e){
						
					}finally{
						lock.unlock();
					}
				}
			}
			
		});
		
		threadPool.shutdown();
		for(int i=0;i<10;i++){
			lock.lock();
			try{
				if(bBhouldSubThread)
					subThreadCondition.await();
					for(int j=0;j<1;j++){
						System.out.println("aaaaa");
					}
					bBhouldSubThread = true;
					subThreadCondition.signal();
			}catch(Exception e){
				
			}finally{
				lock.unlock();
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值