开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
Java并发的书籍断断续续的看了三本:Java并发编程之美,实战Java高并发程序设计,深入浅出Java多线程。看关于线程、进程、volatile、synchronized这些知识点的时候还是觉得非常容易理解的,但是每次看到Atomic、Future、Executor等这些J.U.C工具类就看不明白了,所以就想弄一个框架梳理一下高并发到底在做什么。本文结合Java并发实现原理:JDK源码剖析和深入浅出Java多线程来进行总结。
分为两部分:并发基础(关键字、CAS、AQS)、并发过程中使用的工具类。
并发基础
Thread类和Runnable接口
简介
- 继承
Thread类,并重写run方法; - 实现
Runnable接口的run方法;(主要)
public class Demo {
public static class MyThread extends Thread {
@Override
public void run() {
System.out.println("MyThread");
}
}
public static void main(String[] args) {
Thread myThread = new MyThread();
myThread.start();
}
}
public class Demo {
public static class MyThread implements Runnable {
@Override
public void run() {
System.out.println("MyThread");
}
}
public static void main(String[] args) {
new Thread(new MyThread()).start();
// Java 8 函数式编程,可以省略MyThread类
new Thread(() -> {
System.out.println("Java 8 匿名内部类");
}).start();
}
}
Thread类的几个常用的方法:
- currentThread():静态方法,返回对当前正在执行的线程对象的引用;
- start():开始执行线程的方法,java虚拟机会调用线程内的run()方法;
- yield():yield在英语里有放弃的意思,同样,这里的yield()指的是当前线程愿意让出对当前处理器的占用。这里需要注意的是,就算当前线程调用了yield()方法,程序在调度的时候,也还有可能继续运行这个线程的;
- sleep():静态方法,使当前线程睡眠一段时间;
- join():使当前线程等待另一个线程执行完毕之后再继续执行,内部调用的是Object类的wait方法实现的;
未完待续