- 什么是JUC
JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题
runable和callable相比,下路低,且没有返回值,一般使用callable情况多些,但是特殊的业务不是能普通的线程去解决,这就需要使用juc的相关知识
我们经常使用的callable,lock接口 都属于juc(java.util.concurrent)下的
- 准备编写代码环境
- 创建一个maven项目
- pom.xml引入lombok
<dependencies> <!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> </dependency> </dependencies>
确保项目使用的是jdk1.8版本,如果不是1.8版本,lambda表达式和jdk新特性是用不了的
有了这些准备,就可以正常编写代码
线程和进程
现在写笔记,打字,自动保存,都是进程里面的线程
Java一般使用callable runnable,thread这三种方式去开启线程
Java默认有几个线程?
2个 mian线程,gc(垃圾回收)线程
Java真的可以开启线程吗
不可以的
查看start()源码可以发现 调用的是本地方法 然后调用底层的c++ java无法直接操作硬件
public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A zero status value corresponds to state "NEW". */ if (threadStatus != 0) throw new IllegalThreadStateException(); /* Notify the group that this thread is about to be started * so that it can be added to the group's list of threads * and the group's unstarted count can be decremented. */ group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { /* do nothing. If start0 threw a Throwable then it will be passed up the call stack */ } } } //本地方法 调用底层的c++ java无法直接操作硬件 private native void start0();