winjay-java里实现线程通信,Java技术之类加载机制

Java里如何实现线程间通信? http://www.jianshu.com/p/42a52d53152d
(1)如何让两个线程依次执行?  thread.join()
(2)那如何让两个线程按照指定方式有序交叉运行呢?lock = new Object(); object.wait() 和 object.notify()
(3)四个线程 A B C D,其中 D 要等到 A B C 全执行完毕后才执行,而且 A B C 是同步运行的?
第一步:创建一个计数器,设置初始值,CountdownLatch countDownLatch = new CountDownLatch(2);
第二步:在等待线程里调用 countDownLatch.await() 方法,进入等待状态,直到计数值变成 0;
第三步:在其他线程里,调用 countDownLatch.countDown() 方法,该方法会将计数值减小 1;
第四步:当其他线程的 countDown() 方法把计数值变成 0 时,等待线程 里的 countDownLatch.await() 立即退出,继续执行下面的代码。
(4)三个运动员各自准备,等到三个人都准备好后,再一起跑?
第一步:先创建一个公共 CyclicBarrier 对象,设置同时等待的线程数,CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
第二步:这些线程同时开始自己做准备,自身准备完毕后,需要等待别人准备完毕,这时调用 cyclicBarrier.await(); 即可开始等待别人;

第三步:当指定的同时等待的线程数都调用了 cyclicBarrier.await();时,意味着这些线程都准备完毕好,然后这些线程才同时继续执行。

子线程完成某件任务后,把得到的结果回传给主线程?
Callable结合FutureTask来做







Java 技术之类加载机制   http://www.jianshu.com/p/c7f814911544
1.什么是 Java 类加载机制?


Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器会读取这个 .class 文件,并转换成 java.lang.Class 的实例。有了该 Class 实例后,Java 虚拟机可以利用 newInstance 之类的方法创建其真正对象了。


ClassLoader 是 Java 提供的类加载器,绝大多数的类加载器都继承自 ClassLoader,它们被用来加载不同来源的 Class 文件。

2.Class 文件有哪些来源呢?
(1)最常见的是开发者在应用程序中编写的类,由 AppClassLoader 加载器进行加载
(2)Java 内部自带的核心类,由BootstrapClassLoader 加载器负责加载
(3)Java 核心扩展类,由ExtensionClassLoader加载器负责加载
(4)动态加载远程的 .class 文件。要自己自定义一个 ClassLoader,复写其中的 findClass() 方法。




3.双亲委托机制的概念:解决方法很简单,当查找一个类时,优先遍历最高级别的 Java 核心类,然后再去遍历 Java 核心扩展类,最后再遍历用户自定义类,而且这个遍历过程是一旦找到就立即停止遍历。


4. BootstrapClassLoader比较特殊,它是由 JVM 内部实现的


5.而真正有意思的,是 自定义类加载器,它允许我们在运行时可以从本地磁盘或网络上动态加载自定义类。这使得  开发者可以动态修复某些有问题的类,热更新代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值