[db:标题]

摘要:Java并发探索--上篇 1.基本概念 线程与进程:线程是程序执行的最小单位,而进程是系统进行资源分配和调度的基本单位。例如,一个 Java 程序可以包含多个线程,它们共享进程的资源。 并发与并行:并发是指多个任务在同一时间段内执行,而并行
Java并发探索--上篇 1.基本概念 线程与进程:线程是程序执行的最小单位,而进程是系统进行资源分配和调度的基本单位。例如,一个 Java 程序可以包含多个线程,它们共享进程的资源。 并发与并行:并发是指多个任务在同一时间段内执行,而并行是指多个任务在同一时刻执行。在多核 CPU 系统中,可以实现真正的并行。 同步与异步:同步是指程序按照顺序依次执行,而异步是指程序在执行某个任务时,不需要等待该任务完成,可以继续执行其他任务。 “Java并发探索--下篇” --- 在下面找 【博客园】 https://www.cnblogs.com/jackjavacpp 【CSDN】 https://blog.csdn.net/okok__TXF 2.探索线程的创建 ①线程的状态 从Thread源码里面看出 public enum State { // 尚未启动的线程的线程状态。 NEW, // 就绪 RUNNABLE, // 等待监视器锁的线程的线程状态 BLOCKED, /* 等待线程的线程状态,线程由于调用以下方法之一而处于等待状态: Object.wait() 没有超时 Thread.join() 没有超时 LockSupport.park() */ WAITING, /* 指定等待时间的等待线程的线程状态 线程处于定时等待状态,因为调用了以下方法之一,并指定等待时间: Thread.sleep Object.wait with timeout Thread.join with timeout LockSupport.parkNanos LockSupport.parkUntil */ TIMED_WAITING, //终止线程的线程状态。线程已完成执行。 TERMINATED; } 下面看一张图,很清楚的解释了各状态之间的关系:【节选自https://blog.csdn.net/agonie201218/article/details/128712507】 在Java中,一个Thread有大致六个状态。 线程创建之后(new Thread)它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 RUNNABLE(就绪) 状态。可运行状态的线程获得了 CPU 时间片后就处于 RUNNING(运行) 状态。 明白了线程的运行状态,接下来让我们来看一下在爪哇里面如何创建并且启动线程。 ②线程创建 1)两种基本方式 继承Thread类,重写run方法 public class MyThread1 extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + ": hello world"); } } public class JUCMain { public static void main(String[] args) { new MyThread1().start(); } } 实现Runnable接口,传入Thread public class Runnable1 implements Runnable{ @Override public void run() { System.out.println("hello world, Runnable"); } } public class JUCMain { public static void main(String[] args) { new Thread(new Runnable1()).start(); } } 网上还传有其他创建线程的方式,比如: Callable接口,重写call,结合FutureTask;线程池;lambda表达式等等。。。诚然,这也确实是创建线程启动的方式不错。但是本文毕竟是探索性质的文章,我们要探索其本质。 首先从start()方法看起(这个方式属于Thread类的)。调用start()后,JVM会创建一个新线程并执行该线程的run()方法。注意:直接调用run()不会启动新线程,而是在当前线程中执行。
阅读全文