zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java多线程的等待唤醒机制及如何解决同步过程中的安全问题

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(锁、不会释放锁的操作、单例设计模式之懒汉式(线程安全)