电子商务网站设计实验报告,网站建设期末实践报告,网络营销推广的研究方向,wordpress全站音频AutoEventReset、ManualEventReset#xff0c;是我们在多线程并行编程之中常常需要涉及的#xff0c;但是 ManualEventReset 可能用的并没有那么多#xff0c;这个多用于实现读写锁的#xff0c;当然 Java 自己库提供了官方实现#xff0c;就没必要自己去整了。
C/C 里面… AutoEventReset、ManualEventReset是我们在多线程并行编程之中常常需要涉及的但是 ManualEventReset 可能用的并没有那么多这个多用于实现读写锁的当然 Java 自己库提供了官方实现就没必要自己去整了。
C/C 里面的话这块基本都是自己写的毕竟标准库STL得功能咋个说这块太弱了说没也有点东西说有东西又差了很多点的意思得自己上马搞底层造轮子总之奇奇怪怪。 java 这里面得话官方提供了 CountDownLatch 类可以模拟实现这个效果但是呢必须封装一下否则不太好用就跟 C/C1xx 之中得 std::condition_variable 不封装下用起来不太顺手。 Awaitable 直接说就两核心接口
1、await那个线程要等待其它线程任务结束就执行这个
2、 processed 其它处理任务得线程完成了调用这个顾名思义处理结束 这种需求很正常得并非所有情况都适用协程或FULL ASYNC得情况至于协程JAVA得额滴不太懂本人就一JAVAN多年没在摸过得划水半吊子只是近期整下安卓APP开源解决方案需要重新涉及下JAVA语言整整软件底层实现仅此而已。 例子 Awaitable awaitable new Awaitable();new Thread(() - {System.out.println(B\n);awaitable.processed();}).start();awaitable.await();System.out.println(A\n); 源实现
public class Awaitable {private final AtomicReferenceEvent event_ new AtomicReference();private Object tag_ null;private static class Event {private final CountDownLatch lk_ new CountDownLatch(1);public boolean processed() {try {lk_.countDown();return true;} catch (Throwable ignored) {return false;}}public boolean await() {try {lk_.await();return true;} catch (Throwable ignored) {return false;}}}public void tag(Object v) {this.tag_ v;}public Object tag() {return this.tag_;}// B Thread call.public boolean processed() {Event event this.event_.getAndSet(null);if (event null) {return false;}return event.processed();}// A Thread call.public boolean await() {Event event new Event();if (this.event_.compareAndSet(null, event)) {return event.await();}return false;}
}