《多线程与高并发》读书笔记(一)

简介: 《多线程与高并发》读书笔记(一)

请说出启动线程的三种方式 ?

   你说第一个:new Thread().start(); 第二个: new Thread(Runnable).start() 这没问题 ;那第三个呢,要回答线程池也是用的这两种之一,他这么问有些吹毛求疵的意思,你就可以说通过线程池也可以启动

一个新的线程 3:Executors.newCachedThreadPool()或者FutureTask + Callable

//启动线程的5种方式
  public static void main(String[] args) {
    new MyThread().start();
    new Thread(new MyRun()).start();
    new Thread(()->{
      System.out.println("Hello Lambda!");
   }).start();
    Thread t = new Thread(new FutureTask<String>(new MyCall()));
    t.start();
    ExecutorService service = Executors.newCachedThreadPool();
    service.execute(()->{
      System.out.println("Hello ThreadPool");
   });
    service.shutdown();
 }

线程的常用方法:

   sleep() :意思就是睡眠,当前线程暂停一段时间让给别的线程去运行。Sleep是怎么复活的?由你的睡眠时间而定,等睡眠到规定的时间自动复活

   yield():就是当前线程正在执行的时候停止下来进入等待队列,回到等待队列里在系统的调度算

法里头呢还是依然有可能把你刚回去的这个线程拿回来继续执行,当然,更大的可能性是把原来等待的那些拿

出一个来执行,所以yield的意思是我让出一下CPU,后面你们能不能抢到那我不管.

   join();意思就是在自己当前线程加入你调用Join的线程(),本线程等待。等调用的线程运行

完了,自己再去执行。t1和t2两个线程,在t1的某个点上调用了t2.join,它会跑到t2去运行,t1等待t2运

行完毕继续t1运行(自己join自己没有意义)


常见的线程状态有六种:

   当我们new一个线程时,还没有调用start()该线程处于新建状态

线程对象调用 start()方法时候,他会被线程调度器来执行,也就是交给操作系统来执行了,那么操作系统来执行的时候,这整个的状态叫Runnable,Runnable内部有两个状态(1)Ready就绪状

态/(2)Running运行状态。就绪状态是说扔到CPU的等待队列里面去排队等待CPU运行,等真正扔到

CPU上去运行的时候才叫Running运行状态。(调用yiled时候会从Running状态跑到Ready状态去,线程配调度器选中执行的时候又从Ready状态跑到Running状态去)

   如果你线程顺利的执行完了就会进去(3)Teminated结束状态,(需要注意Teminated完了之后还可不可以回到new状态再调用start?这是不行的,完了这就是结束了)

   在Runnable这个状态里头还有其他一些状态的变迁(4)TimedWaiting等待、(5)Waiting等待、

(6)Blocked阻塞,在同步代码块的情况就下没得到锁就会阻塞状态,获得锁的时候是就绪状态运行。在运行的时候如果调用了o.wait()、t.join()、LockSupport.park()进入Waiting状态,调用o.notify()、

o.notifiAll()、LockSupport.unpark()就又回到Running状态。TimedWaiting按照时间等待,等时间结

束自己就回去了,Thread.sleep(time)、o.wait(time)、t.jion(time)、LockSupport.parkNanos()、

LockSupport.parkUntil()这些都是关于时间等待的方法。


目录
相关文章
|
6月前
|
存储 Java
高并发编程之多线程锁和Callable&Future 接口
高并发编程之多线程锁和Callable&Future 接口
77 1
|
6月前
|
Java 调度
【多线程和高并发】一:线程实现和synchronize
【多线程和高并发】一:线程实现和synchronize
|
数据采集 并行计算 Java
【文末送书】Python高并发编程:探索异步IO和多线程并发
【文末送书】Python高并发编程:探索异步IO和多线程并发
236 0
|
2月前
|
消息中间件 安全 大数据
Kafka多线程Consumer是实现高并发数据处理的有效手段之一
【9月更文挑战第2天】Kafka多线程Consumer是实现高并发数据处理的有效手段之一
231 4
|
4月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
51 0
|
4月前
|
存储 安全 Java
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
66 0
多线程、分布式、高并发都不懂?你拿什么跳槽?
多线程、分布式、高并发都不懂?你拿什么跳槽? Synchronized 相关问题 问题一:Synchronized 用过吗,其原理是什么? 问题二:你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁? 问题三:什么是可重入性,为什么说 Synchronized 是可重入锁? 问题四:JVM 对 Java 的原生锁做了哪些优化? 问题五:为什么说 Synchronized 是非公平锁? 问题六:什么是锁消除和锁粗化? 问题七:为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是
|
11月前
|
消息中间件 缓存 算法
阿里技术专家,用257页文档分享多线程高并发性能调试经验
多线程和高并发这两大块,现在面试问得越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎儿。
|
6月前
|
安全 Java 测试技术
高并发、多线程、分布式都不懂,你拿什么跳槽阿里、腾讯、京东?
Java多线程与高并发实战实践 先来看看高并发多线程一些大厂并发面试题,看你能答出几道!
|
6月前
|
消息中间件 缓存 安全
清华架构大牛剖析高并发与多线程的关系、区别,带你击穿面试难题
当提起这两个词的时候,是不是很多人都认为高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,是不是一脸懵逼?