java多线程的等待唤醒机制及如何解决同步过程中的安全问题
2023-09-14 08:57:55 时间
//同步完成之后,发现还是出现安全隐患的情况,在考虑一下是否访问统一资源的多个线程用的是同一个锁!
//本例中的应将输入输出一起同步(注意输入输出不在同一个线程之中,输出线程不会获得 Person p对象的控制权!)
/* class Input implements Runnable{
int x=0;
Person p;
Input(Person p){
this.p=p;
public void run(){
while(true){
synchronized(p){
if(p.flag){
try{
p.wait();
}catch(InterruptedException e){
if(!p.flag){
if(x==1){
p.setPerson("hjz", "man");
else p.setPerson("哈哈哈", "女女女女");
x=(x+1)%2;
p.flag=true;
p.notify();
//现在的代码是将同步放到函数里!真正开发过的时候就是这样实现,也就是我们多个线程同事操作一个类对象 //调用该类提供的对外方法,并将调用的方法进行同步!防止安全隐患! class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, String sex){ synchronized(this){ if(!flag){ try{ wait(); }catch(InterruptedException e){} if(flag){ this.sex=sex; try{ Thread.sleep(100); }catch(InterruptedException e){} this.name=name; flag=false; notify(); public void outPerson(){ synchronized(this){ if(flag){ try{ wait(); }catch(InterruptedException e){} if(!flag){ System.out.println(name + "....." + sex); flag=true; notify(); class Input implements Runnable{ int x=0; Person p; Input(Person p){ this.p=p; public void run(){ while(true){ if(x==1){ p.setPerson("hjz", "man"); else p.setPerson("哈哈哈", "女女女女"); x=(x+1)%2; class Output implements Runnable{ int x=0; Person p; Output(Person p){ this.p=p; public void run(){ while(true){ p.outPerson();
Java IO基础(同步阻塞IO) Java IO是一套Java 用来读写数据(输入和输出)的API,大部分程序都需要处理一些输入,并由输入产生一些输出(PS: 输入和输出是相对CPU而言的,input 就是从外面到CPU,output就是从CPU到外面,CPU是主人公)。java.io 包下有大约80多个类,大概可以分成四组:
Java NIO、BIO、 AIO 与 同步、阻塞、非阻塞、异步IO 简析 我相信大部分人看到这些名词,都是一头雾水的,如果你去搜索引擎搜索,那么恭喜你,你又会被各种文章中的高大上的名词搞得云里雾里。那么,我们应该怎么理清这么名词之间的关系呢? 所谓 同步/异步/阻塞/非阻塞 IO ,是指操作系统中的对 IO 处理的不同方法,而 Java 对这些不同操作方法做了一些包装,由此有了 BIO / NIO / AIO 几种操作接口。 我不想复制一些高大上的概念,只是想尽量好好说话,说清楚他们之间的关系。 有 A、B、C、D 四个线程可以生产文件,假设他们的返回的文件是一样的,对应我们的服务端 有 E、F、G、H 四个线程在随机时间向服务端上传一个文本,并且要求
Java中实现异步转同步的几种方式 Android常见的异步转同步的方式是通过Callback + Handler的方式来完成,常见的例子是在子线程请求网络,成功后调用Callback,然后通过Handler发送消息给主线程,让子线程更新UI。当然了,实际开发还有好多方式可以实现这种操作。
Java多线程(二)、线程的生命周期、线程的同步、Synchronized的使用方法、同步代码块、同步方法、同步机制中的锁、同步的范围、Lock(锁、不会释放锁的操作、单例设计模式之懒汉式(线程安全) Java多线程(二)、线程的生命周期、线程的同步、Synchronized的使用方法、同步代码块、同步方法、同步机制中的锁、同步的范围、Lock(锁、不会释放锁的操作、单例设计模式之懒汉式(线程安全)
//现在的代码是将同步放到函数里!真正开发过的时候就是这样实现,也就是我们多个线程同事操作一个类对象 //调用该类提供的对外方法,并将调用的方法进行同步!防止安全隐患! class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, String sex){ synchronized(this){ if(!flag){ try{ wait(); }catch(InterruptedException e){} if(flag){ this.sex=sex; try{ Thread.sleep(100); }catch(InterruptedException e){} this.name=name; flag=false; notify(); public void outPerson(){ synchronized(this){ if(flag){ try{ wait(); }catch(InterruptedException e){} if(!flag){ System.out.println(name + "....." + sex); flag=true; notify(); class Input implements Runnable{ int x=0; Person p; Input(Person p){ this.p=p; public void run(){ while(true){ if(x==1){ p.setPerson("hjz", "man"); else p.setPerson("哈哈哈", "女女女女"); x=(x+1)%2; class Output implements Runnable{ int x=0; Person p; Output(Person p){ this.p=p; public void run(){ while(true){ p.outPerson();
Java IO基础(同步阻塞IO) Java IO是一套Java 用来读写数据(输入和输出)的API,大部分程序都需要处理一些输入,并由输入产生一些输出(PS: 输入和输出是相对CPU而言的,input 就是从外面到CPU,output就是从CPU到外面,CPU是主人公)。java.io 包下有大约80多个类,大概可以分成四组:
Java NIO、BIO、 AIO 与 同步、阻塞、非阻塞、异步IO 简析 我相信大部分人看到这些名词,都是一头雾水的,如果你去搜索引擎搜索,那么恭喜你,你又会被各种文章中的高大上的名词搞得云里雾里。那么,我们应该怎么理清这么名词之间的关系呢? 所谓 同步/异步/阻塞/非阻塞 IO ,是指操作系统中的对 IO 处理的不同方法,而 Java 对这些不同操作方法做了一些包装,由此有了 BIO / NIO / AIO 几种操作接口。 我不想复制一些高大上的概念,只是想尽量好好说话,说清楚他们之间的关系。 有 A、B、C、D 四个线程可以生产文件,假设他们的返回的文件是一样的,对应我们的服务端 有 E、F、G、H 四个线程在随机时间向服务端上传一个文本,并且要求
Java中实现异步转同步的几种方式 Android常见的异步转同步的方式是通过Callback + Handler的方式来完成,常见的例子是在子线程请求网络,成功后调用Callback,然后通过Handler发送消息给主线程,让子线程更新UI。当然了,实际开发还有好多方式可以实现这种操作。
Java多线程(二)、线程的生命周期、线程的同步、Synchronized的使用方法、同步代码块、同步方法、同步机制中的锁、同步的范围、Lock(锁、不会释放锁的操作、单例设计模式之懒汉式(线程安全) Java多线程(二)、线程的生命周期、线程的同步、Synchronized的使用方法、同步代码块、同步方法、同步机制中的锁、同步的范围、Lock(锁、不会释放锁的操作、单例设计模式之懒汉式(线程安全)
相关文章
- Java反射 Class类常用方法详解
- java工具类-Java对象转换成Map
- Contest1620 – 2020-2021-2学期《Java Web 系统开发》:java基础:字符串
- java怎么运行_怎样启动JAVA?「建议收藏」
- java面试不会怎么办_【必须录用】面试遇到不会回答的问题,该怎么办?
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java平均的随机数_Java 随机数详解「建议收藏」
- Java实现——Dom4j读写XML文件
- Java多线程(一)
- 一文带你深入理解Java多线程与高并发:Atomic类和线程同步新机制
- java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
- Java学习笔记 (多线程相关知识)
- Java读取Properties文件的六种方法详解编程语言
- java多线程有几种实现方法线程之间如何同步详解编程语言
- Java String对象以“引用”方式被传递详解编程语言
- Java 多线程详解(三)——线程的同步编程语言
- Java 多线程详解(二)——如何创建进程和线程编程语言
- Java操作MySQL数据库快速入门(java访问mysql)
- JAVA连接SAP详解编程语言
- Java多线程18:线程池详解编程语言
- Linux上部署Java项目实践指南(linux部署java项目)
- 版本配置Linux系统的默认Java版本(linux默认java)
- 基于Java回顾之多线程同步的使用详解
- java多线程编程之为什么要进行数据同步
- java多线程编程之使用Synchronized关键字同步类方法
- java多线程编程之使用Synchronized块同步方法