一、线程与进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行。
进程的一个线程死掉,等于整个进程死掉。
线程有助于提高程序的并发性,提高运行效率。
二、实现多线程的几种方式
1、继承Thread类(Thread类实现了Runnable接口)
三个步骤:
(1)创建自己的线程类MyThread,继承Thread类(必须重写run方法,run方法是线程要执行的任务)
class MyThread extends Thread{
public void run(){
System.out.println("run......");
}
}
(2)在main方法中创建MyThread的实例,即创建了一个线程对象
MyThread myThread = new MyThread();
(3)调用线程对象的start方法来启动线程
myThread.start();
注意,这里必须调用start方法来启动线程,调用run方法不能启动线程,相当于普通的方法调用。
java只能单继承,所以如果类已经继承了一个父类,那么它不能再继承Thread类,此时,可以用第二种方法。
2、实现Runnable接口
三个步骤:
(1)创建自己的类,实现Runnable接口(同样必须重写run方法)
public class MyThread extends SomeClass implements Runnable {
public void run() {
System.out.println("run......");
}
}
(2)在main方法中创建MyThread的实例,作为Thread类的参数,Thread是线程对象
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
(3)调用线程对象的start方法来启动线程
thread.start();
注意:这里必须将Runnable作为Thread的参数,通过Thread的start方法来启动线程。调用Runnable的run方法不能启动线程,相当于普通的方法调用。
3、使用ExecutorService、Callable、Future实现有返回结果的多线程(前两种无返回结果)
用到的时候再学……