[javaSE] 并发编程(线程间通信)详解编程语言
新建一个输入类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; * 输入 * @author taoshihan class Input implements Runnable { private Resource resource; public Input(Resource resource) { this.resource = resource; @Override public void run() { // 切换 boolean flag = true; while (true) { synchronized (resource) { if (flag) { resource.name = "taoshihan"; resource.sex = "nan"; } else { resource.name = "陶士涵"; resource.sex = "男"; flag = !flag; * 输出 * @author taoshihan class Output implements Runnable { private Resource resource; public Output(Resource resource) { this.resource = resource; @Override public void run() { while (true) { synchronized (resource) { System.out.println(resource.name + "=====" + resource.sex); public class InputOutputDemo { /** * @param args public static void main(String[] args) { Resource resource = new Resource(); Input input = new Input(resource); Output output = new Output(resource); Thread t1 = new Thread(input); Thread t2 = new Thread(output); t1.start(); t2.start(); }
12678.html
cjava相关文章
- GitHub置顶半个月!78w字百亿级并发设计(全彩PDF),竟出自京东
- 并发控制--悲观锁和乐观锁详解
- 大厂都是如何对高并发系统做到高可用的?
- 使用go的并发性来解决Hilbert酒店问题
- Spring Redis中使用Lua脚本实现高并发原子操作
- 测试数据库并发压力的shell脚本详解程序员
- Apache ab并发负载压力测试实现方法
- SQLServer中防止并发插入重复数据的方法详解
- Java并发基础你需要知道的基础知识详解编程语言
- Java多线程之并发协作生产者消费者设计模式详解编程语言
- 极致性能:谁在Linux高并发服务器上占据优势?(linux高并发服务器)
- mysql行级锁实现数据库并发访问安全(mysql行级锁的使用)
- Redis破解解决高并发库存问题(并发库存问题redis)
- Redis实现高并发写入(redis 高频写入)