进程:程序的一次动态执行的过程,从代码加载到执行完毕的一整个过程。
线程:线程是比进程更小的一个单位,线程是在进程的基础上进一步进行划分,一个进程可以分为多个线程,这些线程同时存在同时运行。
多进程:多进程的操作系统可以同时运行多个程序,由于CPU具备分时机制,每个进程都可以循环获得自己的CPU时间,使进程看起来像同时进行一样。
多线程的实现
要想实现多线程程序,需要依靠一个线程的主体类,此类需要继承Thread类或实现Runnable(Callable)接口
继承Thread类
任何类只需要继承Thread类就会成为一个线程的主类,线程的启动方法需要覆写Thread类的run()方法。
格式如下:1
2
3
4
5
6
7class 类名称 extends Thread{
属性...
方法...
public void run(){
线程主体方法;
}
}
实现Runnable接口
继承Thread类具有单继承的局限性,因此可以利用Runnable接口来实现多线程。
接口定义:1
2
3
4
5
public interface Runnable{
public void run(){
}
}
和Thread类一样,线程主类只需要覆写run()方法即可
两种实现方式的区别
Thread类的定义:
1
public class Thread extends Object implements Runnable
Thread类是Runnable接口的子类
Runnable能更加方便的表示出数据共享的概念
实现有返回值的多线程操作
Runnable接口解决了单继承局限的问题,但是不能反回操作结果,利用java.util.concurrent.Callable类可以解决返回值的问题
接口定义:1
2
3
4
public interface Callable<V>{
public V call() throws Exception;
}
call()方法的返回值由接口上的泛型动态类型决定
主体类定义完成后,需要利用Thread类来启动多线程,但是Thread类没有接收Callable接口对象实例,因此提供了一个新类:
java.util.concurrent.FutureTask
定义如下:1
public class FutureTask<V> extends Object implements RunnableFuture<V>
FutureTask实现了RunnableFuture接口,而RunnableFuture接口又同时实现了Runnable和Future接口
常用方法:
- public FutureTask(Callable
callable) 构造方法 接收Callable接口实例 - public FutureTask(Runnable runnable,V result) 构造方法 接收Runnable接口实例,指定返回类型
- public V get() throws Interrupted Exception,ExecutionException 普通方法 取得线程操作结构
多线程常用操作方法
命名与取得
线程执行,每一次运行都是不同的结果,因为他会根据自己的情况进行资源抢占。
线程命名操作:
- public Thread(Runnable target,String name) 构造方法 接收Runnable接口子类对象,同时设置线程名称
- public final void setName(String name) 普通方法 设置线程名称
- public final String getName() 普通方法 取得线程名称
线程的休眠
休眠可以让线程执行速度慢一些,休眠方法为:1
public static void sleep(long millis) throws InterruptedException
设置休眠单位是ms
线程优先级
线程优先级的操作方法
- public static final int MAX_PRIORITY 常量 最高优先级,10
- public static final int NORM_PRIORITY 常量 中等优先级,5
- public static final int MIN_PRIORITY 常量 最低优先级,1
- public final void setPriority(int newPriority) 普通方法 设置线程优先级
- public final int getPriority() 普通方法 取得线程优先级
线程同步
一个代码块中多个操作在同一个时间内只有一个线程进行,其他线程要等待此线程完成后才可以继续执行
- 同步代码块:利用Synchronized包装代码块,需要制定同步对象,一般为this
- 同步方法:利用synchronized定义方法
线程死锁
同步指的是,一个线程等待另外一个线程执行完毕才会继续执行的形式,而死锁指的是,两个线程都在等待彼此完成,造成了程序的停滞状态
