线程、进程、程序
程序:完成特定任务、用某种语言编写的一段静态代码。
进程:正在执行的程序,是操作系统资源分配的最小单位。eg:运行中的程序、打开的网页等。
线程:是进程内部的最小执行单元,是操作系统调度的最小单位。
线程和进程的关系
- 一个进程包含多个线程,一个线程只能属于一个进程,线程不能脱离进程。
- 在主线程里面可以创建并启动其他的线程。
- 一个进程内的所有线程共享该进程的内存资源。
创建线程的三种方法
-
继承Thread类
扩展Thread类,重写其中的run方法
-
定义
public class MyThread extends Thread{ @Override public void run() { } }
-
调用
MyThread myThread=new MyThread(); myThread.start();//注意是start()启动线程,不要调用成run方法
-
-
实现Runnable接口
-
定义
public class MyThread implements Runnable{ @Override public void run() { }
-
调用
MyThread myThread=new MyThread(); Thread thread=new Thread(myThread); thread.start();
-
-
实现Callable接口
-
定义
public class MyThread implements Callable { @Override public Object call() throws Exception { return null; } }
-
调用
MyThread myThread=new MyThread(); FutureTask futureTask=new FutureTask(myThread); Thread thread=new Thread(futureTask); thread.start(); try { futureTask.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }
-
注意前两个方法无返回值,最后一个方法提供了返回值;
Thread类中方法
- 构造方法
构造方法 | 说明 |
---|---|
Thread() | 创建一个新的线程 |
Thread(String name) | 创建一个指定名称的线程 |
Thread(Runnable target) | 利用Runnable对象创建一个线程,启动时将执行该对象的run方法 |
Thread(Runnable target,String name) | 利用Runnable对象创建一个指定名称的线程,启动时将执行该对象的run方法 |
- 常用方法
方法原形 | 说明 |
---|---|
void start() | 启动线程 |
final void setName(String name) | 设置线程名称 |
final String getName() | 返回线程名称 |
final void setPriority(int newPriority) | 设置线程优先级 |
final int getPriority() | 返回线程优先级 |
final void join() throws InterruptedException | 等待线程终止 |
Static Thread currentThread() | 返回对当前正在执行的线程对象的引用 |
static void sleep (long millis) throws InterruptedException | 让当前正在执行的线程休眠,时间由millis(毫秒)指定 |
线程优先级
优先级较高的线程有更多获得CPU的机会;
优先级用整数表示,取值范围为1~10,一般情况下,线程的默认优先级都是5,但也可以通过setPriority和getPriority方法来设置和返回优先级。
Java的调度方法
- 同优先级组成先进先出队列,使用时间片策略。
- 对高优先级,使用优先调度的抢战策略。
Thread类有三个静态常量来表示优先级
- MAX_PRIORITY:最大,取值10。
- MIN_PRIORITY:最小,取值1。
- NORM_PRIORITY:默认,取值5。