[javaSE] 并发编程(线程间通信)

[javaSE] 并发编程(线程间通信),第1张

概述新建一个资源类Resource 定义成员变量String name 定义成员变量int age 新建一个输入类Input,实现Runnable接口 定义一个构造方法Input(),传入参数:Resou

新建一个资源类Resource

定义成员变量String name

定义成员变量int age

 

新建一个输入类input,实现Runnable接口

定义一个构造方法input(),传入参数:Resource对象

实现run()方法

定义while(true)Resuorce对象的属性赋值

 

 

新建一个输出类Output,实现Runnable接口

定义一个构造方法Output(),传入参数:Resource对象

实现run()方法

定义while(true)打印Resuorce对象的属性

 

 

main方法中

获取Resource对象,new出来

获取input对象,new出来,构造参数:Resource对象

获取Output对象,new出来,构造参数:Resource对象

获取Thread对象,new出来,构造参数:Runnable对象

调用Thread对象的start()方法,开启线程

 

此时会有线程安全问题,查看结果可以发现,汉字和拼音的混了

陶士涵=====

taoshihan=====nan

陶士涵=====nan

陶士涵=====nan

陶士涵=====

陶士涵=====

陶士涵=====nan

陶士涵=====nan

taoshihan=====nan

taoshihan=====nan

 

使用synchronized(){}同步代码块包裹 *** 作同一个资源的地方

注意同步线程的个数,所有的线程都应该加上

注意是否是同一个锁,synchronized()括号内的锁参数:保证是个唯一的资源

使用synchronized(){}包裹上面的赋值和打印,锁:Resource对象(唯一的)

 

查看结果,此时没有安全问题

陶士涵=====

陶士涵=====

陶士涵=====

taoshihan=====nan

taoshihan=====nan

taoshihan=====nan

 

死锁问题:同步中嵌套同步,并且锁不一致,此时会造成死锁问题

/** * 资源 *  * @author taoshihan *  */class Resource {    String name;    String sex;} * 输入 *  * class input implements Runnable {    private Resource resource;    public input(Resource resource) {        this.resource = resource;    }    @OverrIDe    public voID run() {        // 切换        boolean flag = true;        while () {            synchronized (resource) {                if (flag) {                    resource.name = "taoshihan";                    resource.sex = "nan";                } else {                    resource.name = "陶士涵";                    resource.sex = "男";                }                flag = !flag;            }        }    }} * 输出 *  * class Output  Output(Resource resource) {         (resource) {                System.out.println(resource.name + "=====" + resource.sex);            }        }    }} inputOutputDemo {         * @param args     */    static  main(String[] args) {        Resource resource = new Resource();        input input =  input(resource);        Output output =  Output(resource);        Thread t1 =  Thread(input);        Thread t2 =  Thread(output);        t1.start();        t2.start();    }}

 

总结

以上是内存溢出为你收集整理的[javaSE] 并发编程(线程间通信)全部内容,希望文章能够帮你解决[javaSE] 并发编程(线程间通信)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1154233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存