多线程进阶

主题:多线程进阶

多线程的一些核心内容以及要关注的细节。

一、线程的实现

继承thread类重写run()方法和实现Runnable接口实现run()方法

注意点:new线程实例时建议加线程名和要处理下线程的中断异常([InterruptedException])

二、不得不提的[ThreadLocal]

顾名思义:线程局部变量,提高性能,可以理解为对线程的“工厂模式”。

注意点:不能解决多线程环境下的数据共享的问题。

使用[ThreadLocal],一般都是声明在静态变量中。如果不断的创建[ThreadLocal]而且没有调用其remove方法,将会导致内存泄露。如果是static的[ThreadLocal],一般不需要调用remove。

三、线程的同步与锁

普通锁:Synchronized。方法上(静态或非静态)加。

读写锁:接口[ReadWriteLock]、实现[ReentrantReadWriteLock]。性能高,一般建议用这个。

四、线程的调度

wait/(notify/notifyAll())机制

同在Synchronized代码块中有效。

wait/sleep的区别

wait释放锁,sleep没有。

线程的让步yield()和合并join()

五、阻塞队列

java.util.concurrent.[BlockingQueue]、[ArrayBlockingQueue], [DelayQueue], [LinkedBlockingQueue], [PriorityBlockingQueue], [SynchronousQueue]

为多线程的排队等候的业务场景开辟了便捷通道,非常有用

六、线程池

Executors、[ExecutorService和Future]

Future的get ()和get (long timeout, [TimeUnit] unit)方法

对有高性能要求的中间件或者定时任务的实现非常有用。如我们的R系统

最后火青还给大伙总结要注意以下三点:

1、编码时要注意静态或者非静态成员变量等是否有线程不安全问题。

2、不要随便使用Synchronized。

3、尽量用java5的自带的api实现多线程。

时间: 2024-10-13 03:26:33

多线程进阶的相关文章

黑马程序员——多线程进阶(一)

----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 多线程与CPU和内存的关系   来自百度知道. 这个回答我认为是很好的比喻了. CPU对进程操作时不是同时进行,我们知道windows操作系统里面有许多的进程,而CPU是一个一个的来操作这些进程的,当然,多核CPU就可以实现同时操作这些进程,所以为什么CPU核数越多电脑速度越快就是这样,但是内存是一个瓶颈,不能超过这个内存数. 根据上面说的CPU是一个一个的来控制着进程的(

黑马程序员——8 多线程进阶(二)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 静态函数的同步方式 如果同步函数被静态修饰后,使用的锁是什么呢? 通过验证,发现不在是this.因为静态方法中也不可以定义this.静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象.如: 类名.class 该对象的类型是Class 这就是静态函数所使用的锁.而静态的同步方法,使用的锁是该方法所在类的字节码文件对象.类名.class 死锁:当同步中嵌套同步时,就有可能出现死锁

多线程进阶之等待唤醒机制

/* * 线程间通讯实例 * 多个线程在处理同一资源,但是任务不同 */ //资源 class Resource { String name; String sex; } //输入 class Input implements Runnable { Resource r;//类对象 public Input(Resource r)//类对象做构造参数-->初始化资源 { this.r=r; } public void run() { int x=0; while(true) { /* * 加上同

iOS多线程 && Runloop

一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直到你关机.  一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程,线程就是程序的执行流.Mac和iOS中的程序启动,创建好一个进程的同时, 一个线程便开始运行,这个线程叫主线程.主线程在程序中的地位和其他线程不同,它是其他线程最终的父线程,且所有界面的显示操作即AppKit或 U

python+selenium自动化软件测试(第8章) 多线程

前戏:线程的基础 运行多个线程同时运行几个不同的程序类似,但具有以下优点:进程内共享多线程与主线程相同的数据空间,如果他们是独立的进程,可以共享信息或互相沟通更容易.线程有时称为轻量级进程,他们并不需要多大的内存开销,他们关心的不是过程便宜.一个线程都有一个开始,执行顺序,并得出结论.它有一个指令指针,保持它的上下文内正在运行的跟踪.(1).它可以是抢占(中断)(2).它可以暂时搁置(又称睡眠),而其他线程正在运行看一下以下的小案例: import thread from time import

线程与多线程高级篇

python——线程与多线程进阶 之前我们已经学会如何在代码块中创建新的线程去执行我们要同步执行的多个任务,但是线程的世界远不止如此.接下来,我们要介绍的是整个threading模块.threading基于Java的线程模型设计.锁(Lock)和条件变量(Condition)在Java中是对象的基本行为(每一个对象都自带了锁和条件变量),而在Python中则是独立的对象,所以python的threading模块中还提供了Lock,Rlock,Condition,Event等常用类,它们在pyth

IOS 多线程原理

iPhone中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M,第二个线程开始都是512KB.并且该值不能通过编译器开关或线程API函数来更改.只有主线程有直接修改UI的能力. 一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直到你关机. 一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程

Selenium2+python自动化64-100(大结局)[已出书]

前言 小编曾经说过要写100篇关于selenium的博客文章,前面的64篇已经免费放到博客园供小伙伴们学习,后面的内容就不放出来了,高阶内容直接更新到百度阅读了. 一.百度阅读地址: 1.本书是在线阅读的,是实时在线阅读,电子书有个好处就是能及时更新内容. (当然购买此书的话,凭流水单号进QQ读书群:372471871可获取一本对应的PDF文档,方便阅读学习) 2.百度阅读地址:https://yuedu.baidu.com/ebook/0f6a093b7dd184254b35eefdc8d37

CFSocket相关(未完待续)

CFSocket相关 今天想深入了解下CFNetworking,然后就去看了Apple的API,又结合了网络上前人的经验,发现了这么一段话. Sockets 是网络通讯的最基本一层.一个 socket 起的作用类似与一个电话线接口,它可以使你连接到另一个 socket 上(不论是本地的还是网络另一端的),并且向那个 socket 发送数据. 最常见的 socket 抽象概念就是 BSD sockets,而 CFSocket 则是 BSD sockets 的抽象.CFSocket 中包含了少数开销