Java多线程知识点

本文详细探讨了Java多线程的知识,包括start()与run()的区别,线程池的四种模式及其应用场景,如newFixedThreadPool的工作原理。还讨论了线程间的同步问题,如synchronized的使用和可重入锁ReentrantLock与synchronized的区别。同时,文章讲解了并发数据结构如ConcurrentHashMap的线程安全性,以及线程安全的关键字volatile和AtomicInteger。此外,还涉及了线程间通信的wait/notify机制,定时线程的使用,以及线程安全的实现方式。最后,文章分析了进程与线程的区别,线程的生命周期,以及Java并发控制的相关接口和方法。
摘要由CSDN通过智能技术生成
1. Java创建线程之后,直接调用start()方法和run()的区别
start()用来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
若直接调用run(),它只是类的一个普通方法而已,程序中依然只有主线程这一个线程,就跟执行一个普通方法一样。
run()方法必须是public访问权限,返回值类型为void.。

2. 常用的线程池模式以及不同线程池的使用场景
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。


3. newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。

代码展示:
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
实现原理: 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
使用固定大小的线程池并使用无限大的队列


4. 多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值