一、第一章

1、自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程
2、当多个线程去访问一个局部变量是会产生 非线程安全的问题,需要加synchronize 关键字
3、isAlive() 方法,判断当前的线程是否处于活动状态,已启动,且未终止。
4、sleep() 方法,在指定的毫秒数内,让当前正在执行的线程休眠,但不释放锁
5、停止,中断一个线程,可用stop(已废弃),推荐用interrupted() isInterrupted() 用来判断线程是否终止
6、suspend() 暂停一个线程 需要用resume() 方法来恢复线程的执行,不过该方法已经不鼓励使用
7、线程的优先级分为 1~10 这10 个级别,如果小于1 或者大于10 则抛出异常,setPriority(n) ,n 代表优先级别,数字越大,优先级越高。

二、第二章

1、非线程安全的问题存在于实例变量中,方法内部的私有变量,是不存在非线程安全问题的
2、实例变量中的非线程安全问题,可以通过添加synchronized 关键字来解决,使得多个线程顺序执行
3、关键字synchronized 取得的锁都是对象锁,而不是一段代码或者方法当作锁,哪个线程先执行带有该关键字的方法,哪个线程就持有该方法所属对象的锁Lock
4、只有共享资源的读写访问才需要同步化,如果不是共享资源,根本没有同步的必要
5、关键字synchronized 拥有锁重入功能,也就是在使用该关键字时,当一个线程得到一个对象锁后,再次请求此对象锁 时,是可以得到该对象的锁的,也就是说一个synchronized方法或者块的内部调用本类的其他synchronized方法或者块时,是永远可以得到锁的。
6、synchronized 关键字修饰的方法是对当前对象进行加锁,而synchronized代码块是对某一个对象进行加锁

7、同步代码块 synchronized(this){} 代码块也是锁定的当前对象
8、互斥的代码需要放在synchronized修饰的代码块中,synchronized(obj){} 根据互斥的obj的不同,将互斥分为不同的互斥组。
9、要用到的共同数据包括同步锁或者共同算法的若干个方法应该归类到同一个类中,体检高内聚和程序的健壮性
10、volatile 关键字的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。读取原子性,更新不是原子性,会有线程安全的问题。

11、Callable跟Runnable类似,可以配合线程池来使用,Callable的call 方法 可以有返回值,通过Future的get()方法来获取,也可以提交一组任务,然后通过,CompletionService.take().get()方法来获取
12、显示锁Lock 实现类为ReentrantLock, 和关键字synchronizd 功能一致,通过lock()方法来实现同步的控制,通过unlock()方法来释放锁
13、读写锁 ReadWriteLock ,多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥
实现类为ReentrantReadWriteLock 用法
newReentrantReadWriteLock().readLock().lock();
newReentrantReadWriteLock().readLock().unlock();
newReentrantReadWriteLock().writeLock().lock();
newReentrantReadWriteLock().writeLock().unlock();
14、Condition 可以用来替代wait()和notify()方法,必须跟ReentrantLock一起使用
用法:
Lock lock=ReentrantLock();
Condition condition=lock.newCondition();
condition.await(); //等价于wait()方法
condition.signal();//等价于notify()方法
15、semaphore 信号量,控制并发数,也就是控制同时访问资源的线程个数
用法:
Semaphore sem=new Semphore(3);//三个并发数
sem.acquire();//获取信号量
sem.release();//释放信号量
sem.availablePermits();//返回可以使用的信号量数
16、CyclicBarrier 一组线程全部等待彼此达到共同屏障点,当给定数量的线程(线程)正在等待时,它将跳闸,用法:
CyclicBarrier cb =new CyclicBarrier(3);
cb.await();
cb.await();
cb.await();
当有三个 cb.await()时,将进行下一步计划。
17、CountDownLatch 倒计时器,当计数器值减为0 时,等待的现象横将执行下一步操作
通过调用await()方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await() 调用立即返回
CountDownLatch cdl=new CountDownLatch(1);
CountDownLatch cdl2=new CountDownLatch(3);
cdl.await();//等待
cdl2.countDown();//减1
cdl2.countDown();//减1
cdl2.countDown();//减1
cdl.countDown();//减1
18、Exchanger 实现两个线程的数据交换
等待另一个线程到达此交换点,然后将给定对象传输给它,接收其对象作为回报。

java多线程编程核心技术-笔记的更多相关文章

  1. 《Java 多线程编程核心技术》- 笔记

    作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...

  2. Java多线程编程核心技术---学习分享

    继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...

  3. Java多线程编程核心技术---对象及变量的并发访问(二)

    数据类型String的常量池特性 在JVM中具有String常量池缓存的功能. public class Service { public static void print(String str){ ...

  4. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  5. 《Java多线程编程核心技术》推荐

    写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...

  6. 《java多线程编程核心技术》(一)使用多线程

    了解多线程 进程和多线程的概念和线程的优点: 提及多线程技术,不得不提及"进程"这个概念.百度百科对"进程"的解释如下: 进程(Process)是计算机中的程序 ...

  7. Thread.currentThread()和this的区别——《Java多线程编程核心技术》

    前言:在阅读<Java多线程编程核心技术>过程中,对书中程序代码Thread.currentThread()与this的区别有点混淆,这里记录下来,加深印象与理解. 具体代码如下: pub ...

  8. Java多线程编程核心技术(三)多线程通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  9. Java多线程编程核心技术(二)对象及变量的并发访问

    本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...

随机推荐

  1. 软工15个人作业4——alpha阶段

    一.个人总结 1.在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 2.请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.ht ...

  2. 接口取不到POST参数

    利用类似httprequester小工具调试API时偶尔出现一直取不到POST的数据 解决方式: 1.$_POST['paramName']: 只能接收Content-Type: applicatio ...

  3. Keras GRU 文字识别

    GRU(Gated Recurrent Unit)是LSTM的一个变体,也能克服RNN无法很好处理远距离依赖的问题. GRU的结构跟LSTM类似,不过增加了让三个门层也接收细胞状态的输入,是常用的LS ...

  4. 使用Kali Linux执行中间人攻击(演示)

    中间人攻击也叫Man-In-The-Middle-Attack. 我假设你已经知道中间人攻击的基本概念,引用一段wikipedia: 中间人攻击(Man-in-the-middle attack,缩写 ...

  5. Windows/Linux双系统时间错乱问题

    问题描述 安装双系统后,切换系统的时候(Windows)系统时间会错乱 解决方式 百度经验Win/Lin 双系统时间错误的调整 注意1:最后两步更改硬件UTC时间 注意2:适用Windows系统为Wi ...

  6. (效果三)js实现选项卡切换

    开发了很久的小程序,在接到一个h5移动端页面的时候,很多原生的东西都忘了,虽然说我们随着工作经验的增加,处理业务逻辑的能力在提高,但是基础的东西如果长时间不用,也会逐渐忘记.所以以后会经常总结原生的一 ...

  7. 【前端】CSS入门笔记

    教程 CSS 指层叠样式表 (Cascading Style Sheets) CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 选择器通常是您需要改变样式的 HTML 元素 ...

  8. 在Mac中安装python,配置python环境

    参考链接:http://blog.justbilt.com/2014/07/02/setup_python_on_mac/ 其实跟windows差不多,就是在python官网下载特定版本的python ...

  9. datetimefield和datefield的区别

    django创建关于时间的model时,有三个可选,datetimefield.datefield和timefield,这三个分别对应datetime.date.time对象,这三个对象都有共同的属性 ...

  10. Jquery3.x高版本支持IE8

    最近在做项目的时候,遇到一个安全漏洞的问题 检测到目标站点存在javascript框架库漏洞 解决办法是 将受影响的javascript框架库升级到最新版本. 好吧,就给你升吧,升完之后,我的天啊,尽 ...