随着电脑硬件技术的不断提高,充分利用资源显得日益重要。以前在一个流水线上的生产线,现在完全有能力分拆成多个流水线,最终进行组合实现。
对于普通的多线程开发,一般就是继承Thread或者实现Runnable接口,其实Thread本身就是实现Runnable接口的。在高级一点就是整个多线程的框架Executors,它自有线程池的管理,同时和普通的Thread相比,它增加了Callable接口的传入,能够实现多线程的返回值,通过Future得到结果。继续展开就有像ScheduledExecutorService和CompletionExecutorService之类的特殊功能的服务类。
以上就是多线程的几种创建方式,创建完成之后,线程之间如何配合协调呢?就几个简单的方法:join,sleep,interrupt。真正多线程系统在高并发的环境下会出什么问题呢?最大的问题就是数据同步了,如何保证数据一致性。
这个时候sychronized就展现它的威力了,对象锁机制能够保证多线程在高并发的情形下,保持代码执行的原子性,有效保障了数据的准确性。用了sychronized之后,如何实现线程之间的通信呢?wait和notifyAll能够很好的实现。
多线程开发中需要注意死锁问题,一种是两个线程互相join,另外一种就是sychronized两个线程互相等对方的锁释放。
因为多线程中的变量是线程不安全的,所以可以通过ThreadLocal来实现对每个线程的单独变量副本。最后对于那些守护线程来讲,主要设计都是负责为主线程服务的,如果所有非守护线程都已经结束了,那JVM也就退出了。
评论