多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] <br/> > ### 基本概念 * 线程和进程 * 同步和异步 * 并发和并行 * 阻塞和非阻塞 <br/> > ### 线程状态 ![](https://upload-images.jianshu.io/upload_images/3130736-3d55916e36a4770e?imageMogr2/auto-orient/strip%7CimageView2/2/w/700/format/webp) * 1、**新建状态**`New`:线程对象被创建后,就进入了新建状态。例如,`Thread thread = new Thread()` * 2、**就绪状态**`Runnable`: 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的`start()`方法,从而来启动该线程。例如,`thread.start()`,处于就绪状态的线程,随时可能被CPU调度执行。 * 3、**运行状态**`Running` : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。 * 4、**阻塞状态**`Blocked`: 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: * 等待阻塞 -- 通过调用对象的`wait()`方法、`condition.await`方法。 * 同步阻塞 -- 线程在获取`synchronized` 同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。 * 睡眠状态 -- 通过调用线程的`sleep()`或`join()`或发出了I/O请求时,线程会进入到其他阻塞状态。当`sleep()`状态超时、`join()`等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。 * 5、**死亡状态**`Dead`:线程执行完毕或者因异常退出了`run()`方法,该线程结束生命周期。 <br/> > ### 使用多线程常见的三种方式 * 集成`Thread`类 ```java public class MyThread extends Thread { @Override public void run() { super.run(); System.out.println("MyThread"); } } public class Run { public static void main(String[] args) { MyThread mythread = new MyThread(); mythread.start(); System.out.println("运行结束"); } } ``` * 实现`Runnable`接口 ```java public class MyRunnable implements Runnable { @Override public void run() { System.out.println("MyRunnable"); } } public class Run { public static void main(String[] args) { Runnable runnable = new MyRunnable(); Thread thread=new Thread(runnable); thread.start(); System.out.println("运行结束!"); } } ``` * 线程池 <br/> >### Thread类中的方法 ```java //使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 public void start() //如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 public void run() //改变线程名称,使之与参数 name 相同。 public final void setName(String name) //更改线程的优先级。 public final void setPriority(int priority) //将该线程标记为守护线程或用户线程。 public final void setDaemon(boolean on) //等待该线程终止的时间最长为 millis 毫秒。 public final void join(long millisec) //中断线程。 public void interrupt() //测试线程是否处于活动状态。 public final boolean isAlive() //暂停当前正在执行的线程对象,并执行其他线程。 public static void yield() //在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 public static void sleep(long millisec) //返回对当前正在执行的线程对象的引用。 public static Thread currentThread() ```