Java多线程编程

最近在重新整理学习Java的多线程。首先,考虑一下什么时候需要用到多线程。

通常是一些异步处理,后台任务,要尽量使资源最大化使用如CPU,I/O,Printer等等。可以参考以下

http://www.cnblogs.com/kenshinobiy/p/4671314.html

学习tutorialspoint的Java多线程编程后总结如下

http://www.tutorialspoint.com/java/java_multithreading.htm

首先要了解

Thread的Life Cycle和stage

Priority

每个Thread都有Priority。从1到10。Normal是5。

并不一定priority高的线程就能获得资源。priority只是提高概率。

Creation

创建一个线程的方法通常有两种。实现Runnable接口。或继承Thread。下文也有提到使用Executor框架。对该框架没做深入了解。

http://www.cnblogs.com/yezhenhan/archive/2012/01/09/2317636.html

Methods

具体Thread的方法可以参考JDK Reference

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

特别注意的是一些方法是Static,一些方法是Instance的方法。还有一些是从Object继承而来,如Notirfy和Wait等。这些主要用于线程通讯。

注意

直接call run方法和平时call一个Object是一样的。但用start,就会新起一个线程。

yield是让步。

join,等待一定时间等线程死亡。

守护线程的概念

相对用户线程。通过方法setDaemon可以使线程成为守护线程。通常守护线程负责管理线程的工作,不访问任何资源,当没有用户线程时最后退出。参考下文

http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html

Sychonization和Deadlock

为保证资源的有序访问,防止同一资源被不同线程混乱操作,需要作同步管理Sychonization。其实就是使用锁。又叫Monitor。通常sychonized关键字会用来指定一个锁对象。然后在block中写代码。也可以声明方法。但一般推荐用block的形式。死锁通常由于sychonized的嵌套使用。

参考

http://www.tutorialspoint.com/java/java_thread_synchronization.htm

http://www.tutorialspoint.com/java/java_thread_deadlock.htm

Thread Communication

线程间通讯。其实主要是wait()和notify()方法的使用。wait使当前线程进入等待,直到有其他线程notify。notify唤醒一个正在当前对象锁的线程。

参考

http://www.tutorialspoint.com/java/java_thread_communication.htm

http://www.tutorialspoint.com/java/java_thread_control.htm

如果自认为对多线程有了初步的掌握,可以看看以下的问题,测试下自己是否都了解了。

http://www.cnblogs.com/kenshinobiy/p/4671302.html

http://www.ituring.com.cn/article/177182

生产者消费者模式 Producer-consumer pattern

说到多线程和并发必然要认识生产者消费者模式。该模式主要包含以下的要素

1)若干个生产者线程和消费者线程。

2)缓冲区。通常是一个FIFO的队列。

3)信号变量。监测缓冲区是否已满或者为空。

参考

http://www.infoq.com/cn/articles/producers-and-consumers-mode/

https://software.intel.com/zh-cn/blogs/2014/09/17/java-0

http://cmsblogs.com/?p=1300

最后两个链接,一个是Oracle Java JDK的concurrency指南。一个是IBM的系列文章。

http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

https://www.ibm.com/developerworks/cn/java/j-concurrent/ 

原文地址:https://www.cnblogs.com/JackMa/p/5285877.html