读懂Java并发系列——1.线程的基本使用

169 阅读2分钟
# 前言:通过阅读《读懂Java并发系列》共分为4大节、9小节
## 1. 并发基础篇
### 1) 线程的基本使用
## 2. 并发原理篇
### 2) 并发的特性
### 3) volidate、synchronized的语义和作用
### 4) CAS原理与原子操作
### 5) AQS原理
## 3. 并发工具类篇
### 6) 线程池原理和使用
### 7)阻塞队列和实际应用
### 8)并发容器的原理和应用
### 9)CopyOnWrite的含义和使用场景
## 4. 并发实战篇

1.并发基础篇

1)线程的基本使用

  1. 线程的状态和互相转换
  2. 多线程的编写
  3. 线程组和线程优先级

1.线程的状态和互相转换

Java中线程的状态可以通过 enum Thread.State查看

public enum State {
    NEW,//新建
    RUNNABLE,//可运行状态
    BLOCKED,//阻塞状态
    WAITING,//等待状态
    TIMED_WAITING,//超时等待,超过TIME后将结束等待
    TERMINATED//运行结束
}

线程(Thread)的几个方法

wait();//使线程处于等待状态 WAITING
stop();//使线程停止 
terminated();

线程之间的转换

2.多线程的编写

  • 研究多线程,那么如何开启一个线程?
  • Runnable、Thread、Callable、ThreadPoolExecutor开启一个线程各有什么不同?Future是什么? 首先,开启一个线程

/**
 * @author :掘金 Kava小王子
 * @date :Created in 2021/4/12 下午10:09
 * @description:创建线程demo
 * @modified By:
 * @version: $
 */
public class CreateThreadDemo {

    public void useThread() {
        Thread t = new Thread("Thread");
    }

    public void useRunnable() {
        Thread t = new Thread(() -> {
            System.out.println("通过runnable创建线程");
        });
    }
    // 因为Callable是使用在Executor框架中,所以Callable要配合线程池使用
    public void useCallable() {
        Callable callable = () -> {
            System.out.println("通过Callable创建线程");
            return null;
        };
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(15, 35, 25,
                TimeUnit.SECONDS, new ArrayBlockingQueue(5000));
        threadPool.submit(callable);
    }
}

Callable可以让我们捕获异常以及得到线程的返回结果,但是返回结果的封装是通过Future,可以通过调用future.get()方法得到线程的执行结果,但是此方法会阻塞线程。

3.线程组和线程优先级

线程组ThreadGroup是用来对线程进行统一管理的类,含有子线程组和线程,是一个由上而下的结构,但不推荐使用。 线程优先级代表一个线程的价值,价值高的往往有极大概率被cpu优先执行。线程的优先级可通过 thread.setPriority(int num)区间1-10,未设置默认取父线程优先级