商业计划书,高并行下Java多线程编程的基础-188bet亚洲体育_金博宝188官方网站_188bet

国际新闻 196℃ 0

现在我触摸的多线程编程基本上都是根据java.util.concurrent 这个包下的开发的,下面就以这个包来剖析Java的多线程与高并发

一、剖析面试题

1.在java中wait和sleep办法的不同?

最大的不同商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188bet是在等候时wait会开释锁,而sleep一向持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停履行。

2.创立多线程的三种办法

(1)承继Thread()

(2)完结Runnable()接口

(3)完结Callable接口

3.承继Thread与完结Runnable差异

类或许只要求可履行即可,因而承继整个Thread类的开支过大

4.Runnable和Callable的差异

Runnable接口中耶塞拉的菌丝外套的run()办法的回来机选双色球值是void;而Callable接口中的call()办法是有回来值的,和Future/FutureTask配毛远新合能够用来获取异步履行的成果。

5.not性包厢ify效果

(1)notify:唤醒一个正在wait当时目标锁的线程,并让它拿到目标锁remind

(2)notifyAll:唤醒一切正在wait前目标锁的线程

(3)在调用wait,notify,notify商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188betall的时分当时线程有必要获忍者切生果得这个目标的锁。商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188bet

6.线程的5种状况

线程的五种状私摄态

7.你有哪些多线程开发杰出的实践

(1)考虑运用线程池

(2)优先运用volatile 确保可见性

(3)最小化同步规模

(4)给线程命名

二、说说紫光阁java5今后供给多线程的东西:

ExecutorService cachedThreadPool = Executors.线程池办法

1.Java经过Executors供给四种线程池:

newCachedThreadPool创立一个可缓存线程池,需求就添加,不需求就削减。

newFixedThreadPool 创立一个定长线程池,可控制线程最大并发数,超出的线程会在行列中等候。

newSingleThreadExecutor 创立一个单线程化的线程池,它只会用仅有的作业线程来履行使命,确保一切使命依照指定次序(FIFO, LIFO, 优先级)履行。

newScheduledThreadPool 创立一个定长线程池,支撑守时及周期性使命履行。(这个一般不必:一般结构就会有守时器)

2.同步东西

Semaphone(信贝利号量)能够将任何一种容器变为有界堵塞容器:比方服务器登录人数过凤舞九天音乐工厂多排队等候。

CyclicBarrier(循环屏障)他能够做出让几个线程都履行到某个当地之后,才让几个线程一起持续履行。

CountDownLatch(倒计时锁)这个类能够使一个线程等候其他线程完结各自的作业后再履行。

ReentrantLock(重入锁)把锁机制分为读陆柚厉烨锁、巴戟天的成效与效果写锁;让锁更灵敏

Condition用于让指定线程等候与唤醒,按预期次序履行,他有必要和Ree商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188betntrantLock重入锁合作运用。

Callable合作Future/FutureTask获取线程信息。

3.原子目标

AtomicInteger、AtomicLong、AtomicBoolean(Atomic则经过 CAS(达观锁)完结主动同步)闵d

主要是i++不毛家超张黎山歌全集是原子操作,非线程安全的,多线程拜访的时分需求用到synchronized关键字坚持线程同步。synchron商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188betized是失望锁,在多线程竞赛下,加锁、开释锁会导致比较多的上下文切换和调度延时,价值就黎美言是功率低下

4.并发容器

CopyOnWriteArrayList (写仿制列表)

CopyOnWriteArraySet (写仿制调集)

底层完结主要是操作时仿制了一份出来,底牛黄层选用的是重入锁处理并发更改问题。

ConcurrentHashMap (分段锁映射)

hashtable锁住的是一整张hash表而ConcurrentHashMap底层默许分段分红16份别离锁住,使用达观锁来操作功率问题。

ConcurrentSkipListMap屠门镇之孽缘惊魂、ConcurrentSkipListSet、ConcurrentLinkedQueue、这三个都是有序的支撑并发的。

详细能够看Jdk文档

三、散布式锁的完结计划

1. tair

incr和decr操作,适当所以达观锁

2. Redis/memcache

setNx指令

3. Zook一老一小网上注册eeper

充分使用watcher机制,创立暂时结点,谁创立成功,谁就取得当时的锁

4. 数据库:使用数据库的行锁

// 加锁SQL

update trade_base set status = 1 wh商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188betere trade_no=“XXX” and sta鸡肉tus = 0;

// 解锁SQL

update trade_base set status = 0 where trade_no=“XXX” and status = 1;

留意trade_base表上一要有trade_no的列的仅有索引

当然详细用那种散布锁,还需求结合事务本身的需求,一般来说,在并发量不是别大,数据库完全能够扛得住的情况下,用数据库完结散布锁最快,最便利,而且功能的丢失也十分地小;

当然现在许多场景下,都是分库分表,而且商业计划书,高并行下Java多线程编程的根底-188bet亚洲体育_金博宝188官方网站_188bet加锁和解锁别离都只影响一行,对数据库来说,加锁和解锁的 sql也是十分轻量的sql操作,因而在功能丢失上不必过多的忧虑。



标签: 渝新汇息斯敏