您的位置:首页 > 其它

线程小结

2016-06-04 09:41 267 查看
线程:发挥多核CPU的优势 防阻塞 *便于建模

创建线程:继承Thread类 实现Runnable接口

start()和run()区别:

调用了start()方法才会表现出多线程的特性,不同线程的run()方法 里面的代码交替执行;

如果只是调用run()方法,那么代码还是同步执 行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,

另外一个线程才可以执行其run()方法里面的代码。

Runnable接口和Callable接口:

Runnable中run()方法返回值是Void,它只执行run()方法而已

Callable中call()方法有返回值是个泛型和Future FutureTask配合可

以用来获取异步执行的结果。(Callable+Future/FutureTask)

线程安全级别:不可变 如Final类型的类 绝对线程安全 *相对线程安全

*线程非安全

一个线程如果出现了运行时异常时,如果这个异常没有被捕获的话,这个线程就停止执行了。如果这个线程持有某个对象的监听器,此监听器会被释放

Sleep方法和wait方法有什么区别:

都可以用来放弃cpu一定的时间;不同点在于如果线程持有某个对象的监

听器,sleep方法不会放弃这个对象的监听器,而wait方法会放弃。

生产者消费者模型作用:

通过平衡生产能力和消费能力来提升整个系统的运行效率 解耦,生产者和消费者联系越少越可以独自发展不受相互制约。

wait()和notify()/notifyAll()两个方法在调用前必须先获得对象的 锁。 notify()会等待线程剩余代码执行完毕才会放弃对象监听器,wait 方法会立即释放对象监听器。

线程池的作用:避免频繁的创建销毁线程,达到对线程的重用,线程池还可 以根据项目灵活地控制并发的数目。

线程池队列满了,若再提交任务时会发生:若使用无界队列即 LinkedBlockingQueue 则继续添加任务到阻塞队列中等待执行:若使用 有界队列ArrayBlockingQueue 任务首先会被添加到此队列中,此队列满 了则会使用拒绝策略RectedExecutionHandler处理满了的任务,默认是AbortPolicy。

单例模式的线程安全意味着:某个类的实例在多线程坏境下只会被创建一次 出来。 恶汉式单例模式–线程安全;双检锁单例模式–线程安全;懒汉式 单例模式–非线程安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程