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();
    	}
    }
    

      

  • 相关阅读:
    最近想做的开发配套工具
    nodejs 入门
    MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写
    js闭包实例汇总
    javascript深入理解js闭包
    jQuery中$.fn的用法示例介绍
    css3图片旋转
    JS中的prototype
    追求极致--纯css制作三角、圆形按钮,兼容ie6
    CSS 最核心的几个概念
  • 原文地址:https://www.cnblogs.com/mozq/p/10408449.html
Copyright © 2011-2022 走看看