1. 继承Thread类实现多线程
java.lang.Thread,一个类只要继承此类,就表示这个类为线程主体类
继承后必须覆写run()方法(public void run()),这个方法就是线程的主方法
run()方法不能直接被调用
启动多线程必须使用start()方法(public void start())来完成
调用start(),执行的是run()方法中的代码
每一个线程类的对象只能够启动一次,否则就会出现java.lang.IllegalThreadStateException 异常,不需要处理,继承Runtime类
任何情况下,只要定义了多线程,多线程的启动永远只有一个方案:Thread中的start()方法
2. 基于Runnable接口实现多线程
虽然可以通过Thread类的继承来实现多线程的定义,但是继承永远都存在单继承的局限,所以java里面又提供第二种多线程的主体定义结构形式:实现java.lang.Runnable接口
但是由于此时没有继承Thread父类,所以就无法调用Thread中的start()方法来启动多线程,
此时可以利用Thread中的构造方法::
public Thread(Runnable targer);
通过此方法可以调用start方法了
3. 线程的命名与取得
多线程的运行状态是不确定的,那么在程序中的开发之中为了获取到一些需要使用到的线程只能依靠线程的名字来进行操作,
所以线程的名字是一个至关重要的概念,Thread类中提供有线程名字的处理:
构造方法:public Thread(String target, Sting name);
设置名字:public final void setName(String name);
取得名字:public final String getName();
获取当前线程:
public static Thread currentThread();
未设置线程名字,会自动生成一个不会重复的名字
直接用线程主体调用run()方法,获得的名字是main,所以主方法也是一个线程
4.线程的休眠
如果希望某一个线程可以暂缓执行,那么就可以使用休眠的处理
休眠(毫秒):public static void sleep(long milis)throws InterruptedException
休眠(毫秒,纳秒):public static void sleep(long milis, int nanos)throws InterruptedException
以上两种方法都可能会产生InterruptedException中断异常,继承Exception,所以必须处理
5.线程的强制执行
所谓的线程的强制执行指的是当满足于某些条件后,某个线程对象将可以一直独占资源,一直到该线程结束
Thread类中提供有如下方法:
强制执行:public final void join()throws InterriptedException;
6.线程礼让
线程礼让指的是先将资源让出去让别的线程先执行
礼让:public static void yield();
礼让执行的时候每一次调用yield()方法都只会礼让一次当前资源