线程池有两个地方可以保证线程安全,1,单线程---一次只能一个线程进入2,线程池中的队列用阻塞队列
。线程池对象多个线程争夺,以这个对象为锁,即实现
对象池:单线程线程池中的队列中对象,一次只能被一个线程访问
对象组:一个数组装许多单线程池对象,这样数组中的对象本身是线程安全,用时从其队列中获取业务对象(队列中的业务对象不是线程安全的),可以理解为对象组就是多个对象池放入数组
数组就是为了多线程并发,数组中的单线程池对象就是处理多线程并发中同时操作一个对象的问题(放到任务队列等待)---nioeventloop
workers=数组
worker=单线程池对象=nioeventloop,
nioeventloop=selectors+taskqueue
用channel为锁,防止不同线程(客户端,另一个客户端同时操作一个管道)
一个selector一个chanel(selecrors是另起的收集一个管道中所有的该管道注册事件)