1.Executor,java.util.concurrent包中的执行器(Executor),ExecutorService,CachedThreadPool为每个任务创建线程,SingleThreadExecutor
FixedThreadPool使用了有限的线程集来执行所提交的任务,sleep()会抛出InterruptedException异常
2.后台线程:是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分,因此当所有的非后台线程结束的时候,
线程就终止了,同时会杀死进程中所有的后台线程,只要有任何的非后台线程在运行,程序就不会终止
1.Executor,java.util.concurrent包中的执行器(Executor),ExecutorService,CachedThreadPool为每个任务创建线程,SingleThreadExecutor
FixedThreadPool使用了有限的线程集来执行所提交的任务,sleep()会抛出InterruptedException异常
2.后台线程:是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分,因此当所有的非后台线程结束的时候,
线程就终止了,同时会杀死进程中所有的后台线程,只要有任何的非后台线程在运行,程序就不会终止
3.共享资源一般是以对象形式存在的内存片段,,用synchronzized关键字不能试做获取锁并且最终获取锁会失败,或试做获取锁一段时间,然后放弃他,要实现这些,必须使用concurrent类库
4.原子操作需要同步控制
5.模版方法:他的一些功能在基类中实现,并且其一个或多个抽象方法在派生类定义.
6.ThreadLocal创建和管理线程本地存储由java.lang.threadlocal
7.线程的状态:新建,就绪,阻塞,死亡
8.死锁:某个任务在等待另一个任务,而后者在等待另外一个任务,一个任务之间相互等待的连续循环
1.volatile:如果多个任务在同时访问某个域,那么这个域就应该是volatile,否则这个域就只能经由同步来访问
2.理解原子性与易变性,原子操作:对域中的值做赋值和返回操作通常都是原子性的
4.模版方法设计模式:一些功能在基类中实现,并且其一个或多个抽象方法在派生类中定义
5.生成者,消费者(chef,waiter,resturet),生产者,消费者与 队列(BlockingQueue,LinkedBlockingQueue,ArrayBlockingQueue)
6.ScheduledThreadPooolExecutor(schedule运行一次任务),scheduleAtFixedRate()每隔规则的时间重复执行任务;
4.Semaphore,任何时候都只允许一个任务访问一项资源
5.Exchanger 是在两个任务之间交换对象的栏,应用场景:一个任务在创建对象,这些对象的生产代价很高昂,而另外一个任务在消费这些对象,
通过这种方式可以有更多的对象在被创建的同时被消费
6.仿真(银行出纳员仿真,饭店仿真)
7.分发工作
8.性能调优,乐观锁(多线程)?
9.比较各种map的实现(synchronizedHashMap,ConcurrentHashMap)
10.活动对象
java编程思想重点
1.基本线程机制(thread,runnable)
2.共享受限资源(synchronized,lock),原子性,易变性
3.线程的本地存储(threadlocal共享资源,变量共享)
4.终结任务
5.线程之间的协作(wait(),notify(),notifyall(),sleep()),生产者与消费者
6.死锁某个任务在等待一个另外一个任务,而后者在等待别的任务,一个任务之间相互等待的连续循环
死锁必须同时满足的四个条件
1.互斥条件(任务使用的资源不能共享)
2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源
3.资源不能被任务抢占(philosopher 很有礼貌,他们不会从其他philosopher那里抢chopstick)
4.必须循环等待(一个任务等待某一个,某一个等待另外一个任务持有的资源,在等待第一个等循环)
7.新类库的构件(CountDownLatch,CyclicBarrier,DelayQueue,PriorityBlockingQueue,ScheduledExecutor的温室控制器,semaphore,Exchanger)