一、第一章

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. Elasticsearch 文档专用

    ES安装等操作 http://blog.csdn.net/cnweike/article/details/33736429 https://www.elastic.co/guide/cn/elasti ...

  2. Android中轻松使用线程

     当你第一次启动一个Android程序的时候,一个被 称为"main"的线程就被自动创建了.它被称为主线程或者UI线程,它是非常重要的因为负责分发事件给对应的widget,还包含画 ...

  3. react: next-redux-saga

    instead of using the Provider component, you can use the withRedux higher order component to inject ...

  4. Ubuntu下搭建WordPress环境

    WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用.WordPr ...

  5. NLTK下载语言素材中碰到的certificate verify failed (_ssl.c:749)

    NLTK是什么? NLTK是一个开源的项目,包含:Python模块,数据集和教程,用于NLP的研究和开发. NLTK由Steven Bird和Edward Loper在宾夕法尼亚大学计算机和信息科学系 ...

  6. 11.求二元查找树的镜像[MirrorOfBST]

    [题目] 输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成树的镜像转换. 例如输入: 8    /  \  6      1 ...

  7. LINUX系统yum安装SVN服务及其配置

    待: http://oplinux.com/app/svn/linux-yum-install-svn.html  //基础设置及流程 http://files.cnblogs.com/logon/s ...

  8. IDEA导出想要的sql供H2数据库使用

    通过Database连接远程oracle数据库. 选择对应的数据库 双击该数据库需要查询的表,进行自动查询,展示结果. 在查询结果中选择某条数据,右键,选择Data Executer,选择对应的方式. ...

  9. 剑指offer-第5章优化时间和空间效率(丑数)

    题目:我们把只包含因子2,3,5的数叫做丑数.寻找第1500个丑数.通常把1当成第一个丑数. 思路1:第一步判断是否为丑数:丑数是只包含2,3,5的数,因此一定可以被2,3,5整除.通过求余数是否为零 ...

  10. git自用笔记

    同步远程库:git clone xxx.git [filename] git ls-files: 查看已经添加进暂存区的文件. 在commit前修改一个文件后(假设名为:xxx.file),想撤销时, ...