• 多线程实例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();
    	}
    }
    

      

  • 相关阅读:
    JavaWeb03-4.0.0版本的pom.xml
    Git学习(上)
    JavaWeb02-如何创建一个基础的Maven项目
    JavaWeb01-maven环境搭建
    HTML5学习
    RSA和AES加密解密过程
    mysql安装失败,最后一步无响应
    powerDesign16通过PLSql中导出的建表语句,建立E-R图
    PLSQL developer+instantclient_11_2实现远程连接Oracle数据库
    分享黄维仁博士关于亲密关系的佳言
  • 原文地址:https://www.cnblogs.com/mozq/p/10408449.html
Copyright © 2020-2023  润新知