Java多线程一:基础概念

来源:互联网 发布:mac xampp设置htdoc 编辑:程序博客网 时间:2024/05/22 05:12

Java多线程一:基础概念


介绍

由于Java在语言级提供了线程支持,在Java语言中使用多线程要远比在C或C++ 中来得简单,java对线程提供了强健的支持.

Java is a multi threaded programming language which means we can develop multi threaded program using Java.A multi threaded program contains two or more parts that can run concurrently and each part can handle  different task at the same time making optimal use of the available resources specially  when your computer has multiple CPUs.

java是支持多线程的语言,意味着我们能够使用java便捷的开发多线程程序。多线程程序包含至少两个同时运行的部分,它们可以同时处理不同的任务,因此多线程可以充分使用CPU资源.

程序

程序指的是用来执行某些功能任务的代码,静态的概念.

进程

正在执行中的程序实例.进程是系统进行资源分配和调度的基本单位,进程是操作系统中最基本、重要的概念.进程间内存是相互独立的,并不能互相访问和共享。所以进程间相互通信难度是比较大的.

线程

线程也称作轻量级进程(light wight process).线程是程序处理的最小执行单位, 因为线程只能在单个进程的作用域内活动,所以创建线程比创建进程要廉价很多.同个进程下线程之间由于其共享内存,因此线程之间可以协作和进行数据交换,因此基于线程编程模型是相对比较简单的.

不巧当的比喻:进程就好比学校里面的班级,一班的老师在上课的过程如果要点名一班的同学回答者很容易实现, 而一班的老师如果要点名二班的同学回答就比较不靠谱了.

多线程

多线程指的是多个线程同一时刻并行执行处理.备注:对于单核CPU微观层面上看是不存在真正意义的并行执行的,对于多核CPU就可以真正的并行执行线程.

多任务

同时执行多个任务

实现多任务的两种方式    1、基于多进程(传统操作系统使用)    2、基于多线程(现代操作系统推荐使用)

Java创建多线程方式

java创建多线程方式1、通过继承Thread类2、通过实现Runnable接口

继承Thread类

public class MyThread extends Thread {    /**     * 通过继承Thread创建线程时,通常都要覆盖run()方法.     */    @Override    public void run() {        // ...多线程业务处理逻辑代码    }}备注:通过继承Thread类创建多线程是有缺陷的,因为Java语言是不支持多继承的.如果一个类已经有一个继承父类(显式继承非Object)那么它就无法使用这种方式创建多线程了。继承Thread方式比较简答,但是不够灵活。

实现Runnable接口

public class MyThread implements Runnable {    @Override    public void run() {        // ... 多线程业务处理逻辑代码    }}备注:通过实现Runnable接口方式创建多线程比较灵活,不受层次结构影响。

线程生命周期

线程的状态

public enum State {    /**     * 新建状态     * Thread state for a thread which has not yet started.     */    NEW,    /**     * 就绪(可执行)状态,通常是调用了Thread.start()方法后,等待CPU调度。     */    RUNNABLE,    /**     * 阻塞状态,等待获得对象锁。比如线程先进入某个同步方法,但是没有获得对象锁资源。     */    BLOCKED,    /**     * 等待状态,可以通过调用以下方法达到等待状态     *   1、调用Object.wait()方法     *   2、调用Thread.join()方法     *   3、调用LockSupport.park()方法     * A thread in the waiting state is waiting for another thread to     * perform a particular action.     * 备注:特指无指定等待时间的等待。     */    WAITING,    /**     * 等待状态(有具体等待时间),可以通过调用以下方法达到等待状态     *     1、Thread.sleep     *     2、Object.wait(long)     *     3、Thread.join(long)     */    TIMED_WAITING,    /**     * 终止状态,即线程执行完毕     */    TERMINATED;}

线程生命周期

线程生命周期


图片名称

备注:这张图不够完整,Waitting同样可以变为Runing状态,Running状态同样可以变为Runnable状态。

参考

1、https://en.wikipedia.org/wiki/Thread_(computing)
2、http://www.ibm.com/developerworks/cn/java/multithreading/
3、http://www.javatpoint.com/multithreading-in-java

0 0