一、Thread类
java.lang包提供了Thread类来实现多线程,在Java中,线程有三部分组成:
1)虚拟CPU,封装在Thread类中,它控制着整个线程的运行;
2)执行代码,传递给Thread,由Thread类控制顺序执行;
3)处理数据,传递给Thread,是代码在执行过程中需要处理的数据。
Thread的主要构造方法和方法
Thread() | 创建一个没有名称的线程对象 |
Thread(String name) | 创建一个名称为name的线程对象 |
Thread(Runnable target) | 创建一个以target为参数的线程对象 |
Thread(Runnable target,String name) | 创建一个以target为参数、name为名称的线程对象 |
Thread(ThreadGroup group,String name) | 创建一个归属于group线程组、名称为name的线程对象 |
Thread(ThreadGroup group,Runnable targer) | 创建一个归属于group线程组、target为参数的线程对象 |
public static int activeCount() | 返回当前线程所属线程组中存活的线程数 |
public static Thread currentThread() | 返回当前线程对象 |
public long getId() | 返回该线程的ID,每个线程都有唯一的ID |
public final String getName() | 返回该线程的名称 |
public final int getPriority() | 返回该线程的优先级 |
public Thread.State getState() | 返回该线程的状态,用于检测运行状态 |
public final ThreadGroup getThreadGroup() | 返回该线程所在线程组 |
public void interrupt() | 中断线程 |
public static boolean interrupted() | 判断该线程是否中断,若中断则清楚中断状态 |
public final boolean isAlive() | 判断线程是否处于活动状态,若线程已经启动但且尚未终止称为活动状态 |
public final boolean isDaemon() | 判断该线程是否为守护线程 |
public boolean isInterrupted() | 判断该线程是否中断,且线程状态不受次方法的影响 |
public final void join | 等待该线程终止 |
public void run(); | 线程的主题,Thread的子类应该重写该方法,实现Runnable接口的对象应该实现该方法 |
public final viod setDaemon(boolean on) | 设置线程是否为守护线程 |
public finla void setName(String name) | 设置线程名称 |
public final void setPriority(int newPriority) | 设置线程优先级 |
public static void sleep(long milis) | 使该线程休眠milis毫秒 |
public void start(); | 启动该线程 |
public static void yield() | 暂停当前线程,让处于活动状态的线程重新抢占控制权 |
通过继承Thread来创建线程的方法:自定义的封装类继承Thread并重写run方法即可,如果还需要还可以重写其他方法,代码如下
/** * @author: PrincessHug * @date: 2019/4/11, 9:04 * @Blog: https://www.cnblogs.com/HelloBigTable/ */ public class ThreadDemo extends Thread { String name; public ThreadDemo(String name) { super(name); } @Override public void run() { for (int i=1;i<21;i++){ System.out.println(this.getName() + ":" + i); } System.out.println(this.getName() + "的优先级为:" + this.getPriority()); } } public class ThreadDriver { public static void main(String[] args) { ThreadDemo td = new ThreadDemo("11#"); td.setPriority(MAX_PRIORITY); td.start(); for (int i=1;i<11;i++){ new ThreadDemo(i + "#").start(); } } }
二、Runnable接口
Runnable中只有一个抽象方法run,实现Runnable的对象要实现run方法,然后通过Thread(Runnable targer)的构造方法来创建一个线程
代码如下:
/** * @author: PrincessHug * @date: 2019/4/11, 9:13 * @Blog: https://www.cnblogs.com/HelloBigTable/ */ public class RunnableDemo implements Runnable { @Override public void run() { for (int i=1;i<11;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } System.out.println(Thread.currentThread().getName() + "的优先级为:" + Thread.currentThread().getPriority()); } } public class RunnableDriver { public static void main(String[] args) { RunnableDemo rd = new RunnableDemo(); Thread td = new Thread(rd, "11#"); td.start(); for (int i=1;i<11;i++){ new Thread(rd,i + "#").start(); } } }