多线程(四)多线程之间的通信

 

 一.环境

  idea安全

二.多线程之间如何通信,什么是多线程之间的通信

2.1举例

多线程模拟生成者消费者,需求生产者生产一条数据,消费者消费一条,交替执行多线程

建立数据载体(实体类)ide

public class UserInfo implements Serializable {

    private  String username;
    private  String usersex;
}
View Code

 

建立生产者测试

public class InputThread implements Runnable {
    UserInfo userInfo=new UserInfo();
    //用来作向数据载体中放数据
    public InputThread(UserInfo userInfo){
        this.userInfo=userInfo;
    }
    public void run() {
        int count=0;
        while (true){
            if(count==0){
                userInfo.setUsername("小明");
                userInfo.setUsersex("男");
            }else if (count==1){
                userInfo.setUsername("小红");
                userInfo.setUsersex("女");
            }
            count=(count+1)%2;
        }

    }
}
View Code

 

建立消费者this

public class OutputThread implements Runnable {

    UserInfo userInfo=new UserInfo();

    public OutputThread( UserInfo userInfo){
        this.userInfo=userInfo;
    }

    public void run() {
        while (true){
            if(userInfo!=null){
                System.out.println("userName:"+userInfo.getUsername()+",userSex:"+userInfo.getUsersex());
            }
        }

    }
}
View Code

 

建立测试类idea

public static void main(String[] args) {
        UserInfo userInfo=new UserInfo();
        OutputThread outputThread=new OutputThread(userInfo);
        InputThread inputThread=new InputThread(userInfo);
        Thread t1=new Thread(outputThread);
        Thread t2=new Thread(inputThread);
        t1.start();
        t2.start();
    }
View Code

 

结果spa

 

很显然出现了线程安全问题线程

修改代码3d

 

 数据不乱了,可是还不是咱们想要的结果code

2.2wait、notify、notifyAll()方法

修改上述代码

 

 

 

 

 

 

 

 运行结果

 

 

相关文章
相关标签/搜索