java 多线程

来源:互联网 发布:游族网络大皇帝 编辑:程序博客网 时间:2024/05/20 08:24

http://tech.it168.com/focus/200902/Java-concurrent/index.html   java多线程与并发编程

一、基本概念

线程是乱序执行


线程可以共享内存,允许协作和数据交换


线程支持与java语言本身合为一体


java中main函数也是一个线程,被称为主线程,只有在需要多线程的时候,才可以创建新的线程。当然,java中也有自动创建的线程,比如RIM、AWT/SWINT,定时器线程等,不过RIM、AWT/SWINT,定时器线程都是守护进程。


Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员必须覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用 Thread 的 start() 函数,该函数再调用 run()。


当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。


两个线程同时访问一个对象的时候,每个对象在运行时都有一个关联的锁,这个锁可通过为方法添加关键字 synchronized 来获得。


Object 类为此提供了三个函数:wait()、notify() 和 notifyAll()。来实现线程间通信。


在 Java 虚拟机 (JVM) 中,即使在 main 结束以后,如果另一个用户线程仍在运行,则程序仍然可以继续运行。但是如果所有的用户线程都执行完了,此时无论守护线程处于何种状态,都得停止。


在线程化的程序中,可能发生的某些常见而讨厌的情况是死锁、活锁、内存损坏和资源耗尽。

二、线程池

线程池的作用是:当服务器需要创建的线程过多时,通过减少每个线程创建和销毁的时间,来提高效率。

线程池的组成部分

线程池管理器:用于创建并管理线程池,线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务

工作线程(WorkThread): 线程池中线程

任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行

任务队列:用于存放没有处理的任务。提供一种缓冲机制。

线程池技术对于服务器程序的性能改善是显著的。线程池技术在服务器领域有着广泛的应用前景。

线程池适用于大量线程存在,且任务较小的场合,比如点击网页的任务。但是对于少量线程,其优化作用不明显。对于线程任务时间远大于创建时间的线程,其优势也不明显。







原创粉丝点击