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