Java多线程基础总结
一、线程和进程关系
二、创建方式
1.继承Thread类,重写run方法
2.实现Runable接口,重写run方法
3.使用匿名内部类
三、API接口
start()
currentThread() 获取当前线程对象
getID() 获取当前线程ID Thread-编号 该编号从0开始
getName() 获取当前线程名称
sleep() 休眠线程
stop() 停止线程
四、实例化线程
Thread() 分配一个新的 Thread 对象
Thread(String name) 分配一个新的 Thread对象,具有指定的 name正如其名
Thread(Runable r) 分配一个新的 Thread对象
Thread(Runable r, String name) 分配一个新的 Thread对象
五、守护进程
用户线程,不会随主线程停止而停止
守护线程,随主线程停止也停止,setDaemon(true),设置守护线程
gc线程属于守护线程
六、多线程运行状态
新建状态 Thread thread = new Thread()
就绪状态,等待CPU调度 thread.start()
运行状态 thread.run()
阻塞状态 thread.sleep()
死亡状态 thread.stop()
七、join()方法
join()的作用是让其他的线程变为等待,直到当前线程执行完毕。
八、线程安全问题
多个线程同时共享,同一个全局变量或静态变量,做写操作,可能会发生数据冲突问题。
九、线程安全解决办法
synchronized或使用lock锁
1. 同步代码块,可以是任意对象
synchronized(同一个数据){
可能会发生线程冲突问题
}
2. 同步函数,使用this锁。
3. 静态同步函数,使用字节码文件锁。
九、死锁问题
嵌套同步,导致锁无法释放
十、多线程三大特性
原子性、可见性、有序性。
十一、Java内存模型(JMM)
线程之间的共享变量存储在主内存,每个线程都有一个私有的内地内存,本地内存中存储了该线程以读/写共享变量的副本。本地内存只是一个概念,涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编辑器优化。
十二、Volatile
Volatile关键字解决了线程之间的可见性问题。Volatile强制线程每次读取值都从主内存“取值”。
十三、AtomicInteger原子类
可以通过线程安全的方式操作加减。
十四、volatile与synchronized区别
仅靠volatile不能保证线程的安全性。(原子性)
①volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法
②volatile只能保证数据的可见性,不能用来同步,因为多个线程并发访问volatile修饰的变量不会阻塞。
synchronized不仅保证可见性,而且还保证原子性,因为,只有获得了锁的线程才能进入临界区,从而保证临界区中的所有语句都全部执行。多个线程争抢synchronized锁对象时,会出现阻塞。
线程安全性
线程安全性包括两个方面,①可见性。②原子性。
仅仅使用volatile并不能保证线程安全性。而synchronized则可实现线程的安全性。
十五、线程间通讯,wait()和notify(),notifyAll()
属于Object方法
wait()可以让当前类锁住的线程从运行状态变为休眠状态,释放锁的资源。
notify()可以让当前类锁住的线程从休眠状态变为运行状态。
一般在线程同步中,同一个锁资源使用。
十六、Lock锁(jdk1.5并发包)
Lock lock = new ReentrantLock();
try{
lock.lock();
lock.unlock();
}catch(){
}
十七、Condition实现和wait()、notify()一样的功能
await();同wait()
signal();同notify()
十八、怎么停止线程
不建议使用stop(),
1、设计while,变量判断退出循环。
2、interrupt()让线程抛出异常。
十九、ThreadLock
为每一个线程提供一个局部变量。
底层实现
Map.put(Thread.currentThread(), Object);
二十、Java并发包
原子类、Lock、并发类
二十一、Vector和ArrayList
实现原理都是通过数组实现,查询速度快,增加、修改、删除速度慢。区别
Vector是线程安全的,ArrayList是线程不安全的。
二十二、HasTable和HasMap
实现原理都是通过链表+数组
HasTable是线程安全的,HasMap是线程不安全的。
二十三、Collection.synchroniedMap()
把非安全的Map集合转为安全的Map。(代理模式)
二十四、ConcurrenHasMap
分段锁,将一个整体拆分成多个小的HasTable,默认分16段。
二十五、CountDownLatch
计数器,可以限制执行顺序。
CountDownLatch countDownLatch = new CountDownLatch(2);
countDownLatch.countDown();每次减1
countDownLatch.countDown();
countDownLatch.await(); 不为0时一直等待
二十六、CyclicBarrier
计数器,当线程数达到一定的数量,并发执行。
CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
cyclicBarrier.await; 等待线程达到5个,一起并发执行
二十七、Semaphore
计数器
Semaphore semaphore = new Semaphore(5); 最大资源数
semaphore.availablePermits(); 判断资源
semaphore.acquire(); 获取资源
semaphore.release(); 释放资源
二十八、并发队列
有界和无界
阻塞队列和非阻塞队列
ConcurrentLinkedDeque,无界非阻塞队列
BlockingQueue,有界阻塞队列
转载请注明出处。
作者:wuxiwei
出处:http://www.cnblogs.com/wxw16/p/8915834.html
Java多线程基础总结的更多相关文章
- [转]Java多线程干货系列—(一)Java多线程基础
Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...
- Java多线程基础:进程和线程之由来
转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...
- Java 多线程——基础知识
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java多线程--基础概念
Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...
- Java多线程基础知识总结
2016-07-18 15:40:51 Java 多线程基础 1. 线程和进程 1.1 进程的概念 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程, ...
- Java基础16:Java多线程基础最全总结
Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...
- 1、Java多线程基础:进程和线程之由来
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...
- Java 多线程基础(一)基本概念
Java 多线程基础(一)基本概念 一.并发与并行 1.并发:指两个或多个事件在同一个时间段内发生. 2.并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
- Java 多线程基础(三) start() 和 run()
Java 多线程基础(三) start() 和 run() 通过之前的学习可以看到,创建多线程过程中,最常用的便是 Thread 类中的 start() 方法和线程类的 run() 方法.两个方法都包 ...
- Java 多线程基础(四)线程安全
Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线 ...
随机推荐
- easyUI combobox 添加空白项
今天测试反馈了一个问题,希望可以在下拉框下面加一个空白的选项(下拉框用的是combobox方法). 开始分析这个问题: 首先,这个数据都是后台读出来的,那么我在后台直接添加可以么,答案是可以的,如果没 ...
- Syabse数据库无法启动的解决方案
在探讨本问题之前,首先要为大家解释一下Syabse数据库本身.Syabse数据库应用和本身的架构相对而言都相对比较复杂,多数技术人员及公司对Sybase数据库底层结构和运行机制也处于并非完全了解的阶段 ...
- SQL语句取多列的最小值(排除0)
经常遇到获取数据表中多个列的最小值和最大值,例如: 获取这 4个价格的最小值和最大值: SELECT( SELECT min(minPrice) FROM ( VALUES (IIF(MarketSi ...
- python性能分析--cProfile
Python标准库中提供了三种用来分析程序性能的模块,分别是cProfile, profile和hotshot,另外还有一个辅助模块stats.这些模块提供了对Python程序的确定性分析功能,同时也 ...
- TFTP通信原理
TFTP的通信流程 TFTP共定义了五种类型的包格式,格式的区分由包数据前两个字节的Opcode字段区分,分别是: · l 读文件请求包:Read request,简写为RRQ,对应Opcode字段值 ...
- apache的重写规则
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]RewriteRule .* http://i8. ...
- php中函数和方法的区别
php的方法就是定义在类里面的方法,一般不建议在方法内部定义方法,但是这种也可以这种叫做内部方法,一般只能本方法调用. 如果定义在同一个类中的方法,在同类的其他方法中调用是$this->方法名就 ...
- MSSQl 事务的使用
事务具有以下四个特性: 1.原子性 事务的原子性是指事务中包含的所有操作要么全做,要么全不做. 2.一致性 在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态. 3.隔离性 ...
- NHibernate从入门到精通系列(1)——NHibernate概括
内容摘要 NHibernate简介 ORM简介 NHibernate优缺点 一.NHibernate简介 什么是?NHibernate?NHibernate是一个面向.NET环境的对象/关系数据库映射 ...
- 深入浅出Lua虚拟机
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:郑小辉 | 腾讯 游戏客户端开发高级工程师 写在前面:本文所有的文字都是我手工一个一个敲的,以及本文后面分享的Demo代码都是我一行一 ...