Java多线程编程核心技术 第一章java多线程技能-读书笔记

105 阅读2分钟

单线程CPU利用率大幅降低

使用多线程也就是在使用异步。

使用继承方式创建线程是,最大的局限就是不支持多继承, 因为Java语言是单根继承,所以为了支持多继承,完全可以实现runnable接口的方式,一边实现一边继承。这两种方式本质上没有区别。

线程的调用具有随机性,不会安装代码书写顺序执行。

线程启动顺序与start()执行顺序无关。

Thread.java类也实现了Runnable接口,意味着构造函数Thread(runnable target)不光可以传入Runnable接口的对象,还可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交由其他的线程调用。

实例变量与线程安全

自定义线程类中的实例变量针对其他线程可以有共享与不共享之分,这在多个线程之间进行交互时是一个很重要的技术点。

共享数据的情况就是多个线程可以访问同一个变量,比如在实现投票功能的软件时,多个线程可以同时处理同一个人的票数。

synchronized可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区”。

详细过程是:

当一个线程想要执行同步方法里的代码时,线程首先尝试去拿这把锁,如果能够拿到这把锁,那么这个线程就可以执行synchronized里面的代码。

如果不能拿到这把锁,那么这个线程就会不断地尝试拿这把锁,直到能够拿到为止,而且是有多个线程同时去争抢这把锁。

非线程安全定义:

主要指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。