Java多线程编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
生产者消费者模式 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
最后两个链接,一个是Oracle Java JDK的concurrency指南。一个是IBM的系列文章。
http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
https://www.ibm.com/developerworks/cn/java/j-concurrent/
以上是关于Java多线程编程的主要内容,如果未能解决你的问题,请参考以下文章