zoukankan      html  css  js  c++  java
  • 多线程实例1 一个线程写入人员信息,一个线程读取人员信息

    package com.mozq.thread.resource2;
    
    /**
     * 创建2个线程,一个写入人员信息,一个读取人员信息
     * 
     * @author jie
     *
     */
    class Resource {
    	private String name;
    	private String sex;
    	private boolean set = false;
    	
    	public synchronized void set(String name, String sex) {
    		//如果有数据等待
    		if(set) {
    			try {
    				this.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		//没有数据则写入数据
    		this.name = name;
    		this.sex = sex;
    		this.set = true;
    		//通知其他线程来处理数据
    		this.notify();
    	}
    
    	public synchronized void out() {
    		//如果没有数据读,等待
    		if(!set) {
    			try {
    				this.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		//读取数据
    		System.out.println(this.name + "..." + this.sex);
    		set = false;
    		//通知写线程写入数据
    		this.notify();
    	}
    }
    
    class Input extends Thread {
    	private Resource r;
    
    	public Input(Resource r) {
    		this.r = r;
    	}
    
    	@Override
    	public void run() {
    		boolean flag = true;
    		while (true) {
    				if (flag) {
    					r.set("刘备","男");
    				} else {
    					r.set("小乔","女");
    				}
    				flag = !flag;
    		}
    	}
    }
    
    class Output extends Thread {
    	private Resource r;
    
    	public Output(Resource r) {
    		this.r = r;
    	}
    
    	@Override
    	public void run() {
    		while (true) {
    			r.out();
    		}
    	}
    }
    
    public class ResourceDemo {
    	public static void main(String[] args) {
    		/*
    		//创建资源
    		Resource r = new Resource();
    		//创建任务线程
    		Input in = new Input(r);
    		Output out = new Output(r);
    		//开启线程
    		in.start();
    		out.start();
    		 */
    		//创建资源,在单线程中,必须顺序依次调用set和out方法,否则会造成单线程一直等待。
    		Resource r = new Resource();
    		r.set("刘备", "男");
    		r.set("刘备", "男");
    		r.out();
    	}
    }
    

      

  • 相关阅读:
    Python range() 函数用法
    python测试框架&&数据生成&&工具最全资源汇总
    为什么你写的用例测不出Bug来?
    软件测试人员必备知识工具清单
    接口测试需要验证数据库么?
    如何在实际工作做开展性能测试?
    为什么要做接口测试?
    面试时让你说一个印象最深的bug,该怎么回答
    maven一键部署tomcat war包(转载)
    数据库中 显示 小计 与 总计
  • 原文地址:https://www.cnblogs.com/mozq/p/10408449.html
Copyright © 2011-2022 走看看