分享

了解Java多线程及如何创建和启动多线程?

 爱可乐的小咖 2016-08-29

1 . 进程与线程

至今为止,我们开发的程序在同一时间只能执行一项任务,如果程序执行中遇到了耗时的任务,程序必须等待该任务完成后才能执行后续的代码。这样的单线程结构不能充分利用计算机的硬件资源,代码运行效率不高。合理的使用多线程结构,可以并行的处理多项任务,避免了不相关任务之间的等待,充分利用硬件资源(现往很多CPU 均为多核设计) 提高程序的效率。

进程(process):我们可以简单的认为一个运行中的程序就是一个进程。进程是操作系统分配CPU 资源与内存资源的最小单位。过去的操作系统是单进程的 (如DOS 操作系统),同一时刻只能有一个进行运行;现代的操作系统均是多进程的,允许多个进程同时运行(同时运行QQ和IE 浏览器),操作系统采用时间片轮转法或其他算法为进程分配CPU 资源,下图是Windows 操作系统中某一时刻的进程列表:

了解Java多线程及如何创建和启动多线程?

对于Java SE 程序,将运行中的Java 程序称为进程则不准确。因为Java 程序并非由操作系统执行分R配CPU资源井执行,而是通过Java 虚拟机执行。对操作系统而言,java虚拟机才是进程 ( 我们在进程列表中会看到java. exe 或javaw.exe ),而Java 程序并不算做进程。

线程(Thread):进程内部可以拥有1 至多个线程,操作系统将资源分配给进程后,进程再将资源分配给线程,由线程完成具体的工作。可以认为进程是线程的容器。我们知道Java SE 程序的执行入口是main 函数,main 函数执行时所属的线程称为一般称为主线程。除了主线程,Java 虚拟机还会启动垃圾回收线程等其他线程

线程的状态:多个线程之间可以并行执行,也可以根据需要让一个线程等待另一个线程,或暂停一个线程。一般来说,线程的状态有就绪(new)、执行(runnable)、等待(waiting)阻塞(blocked)、终止(terminated) 等。

守护线程(Daemon Thread): 一般来说,进程要等到所有线程都终止运行后才结束。但对于java 中的垃圾回收等线程,是在程序运行过程中一直执行的,不会主动终止,为了保证进程能正常结束,可以将这一类线程标注为守护线程,在java SE 中,Java虚拟机会在所有非守护线程终止后结束进程 (还有一种情况: 调用System. exit ()方法也会导致进程结束)。

2. 创建和启动线程

Java 中有两种创建线程的方法,一种是编写类继承Thread 类,一种是编写类实现Runnable方法,我们使用第一种方式。基本写法如下:

代码演示:创建线程

class Mythread extends Thread {

public void run() { ①

System .out.println(“线程开始执行!”;

try {

Thread.sleep(1000);

}catch (InterruptedException e) {

e.printstacktrace();

}

System.out.prlntln(“线程执行完毕!”;

}

}

public class ThreadDemo {

public static void maln(String[] args) {

System .out.prlntln(”创建线程!') ;

Mythread thread = new Mythread(); ②

System.out.println(''启动线程!”);

thread.start(); ③

System.out.println(“启动完毕! ”);

}

}

输出结果如下:

创建线程!

启动线程!

启动完毕!

线程开始执行! ④

线程执行完毕!

代码解析:

① 线程必须覆盖父类的run 方法。run 方法中的代码会在线程启动的时候执行。run 方法执行结束线程也就执行结束、变为终止状态。

② 实例化线程会使线程处于就绪状态,但这时不会执行线程中的代码。

③ 调用那个线程的start 方法会启动线程,将线程变为执行状态。

④ 从运行结果可以看出,主线程输出”启动线程”后井没有等待子线程, 直接继续执行输出 “启动完毕” ,说明此时主线程与新创建的子线程在同时运行。

分享来自兆隆IT云学院,QQ:598756835

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多