Lock锁,实现接口为ReentrantLock
方法有 lock() unlock()
一般要加 ty....finally防止异常跳出
这三个是通过锁对象进行调用的,因为涉及到锁的释放
并且wait后线程等待,锁会立即释放,等下次从这里爬起来继续进行下一步操作
notify用来唤醒当前锁里面还在等待的线程.
可以保证生产者消费者模式不出错.
线程池
当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。
•线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。
从JDK5开始,Java内置支持线程池
JDK5新增了一个Executors工厂类来产生线程池
es1.submit(new Runnable());
es1.shutdown.//关闭线程池.
使用线程池每次用完后线程回收,下次可以直接使用,不需要启动线程.,提高了效率,
实现Callable接口,重写call方法,结果和run方法差不多,只不过call有返回值类型,并且需要抛异常.,不过Callable依赖线程池存在.