线程小结

线程:发挥多核CPU的优势 防阻塞 *便于建模
创建线程:继承Thread类 实现Runnable接口


start()和run()区别:

  1. 调用了start()方法才会表现出多线程的特性,不同线程的run()方法 里面的代码交替执行;
    如果只是调用run()方法,那么代码还是同步执 行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,
    另外一个线程才可以执行其run()方法里面的代码。

Runnable接口和Callable接口:

  1. Runnable中run()方法返回值是Void,它只执行run()方法而已
    Callable中call()方法有返回值是个泛型和Future FutureTask配合可
    以用来获取异步执行的结果。(Callable+Future/FutureTask)

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


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


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

  1. 都可以用来放弃cpu一定的时间;不同点在于如果线程持有某个对象的监
    听器,sleep方法不会放弃这个对象的监听器,而wait方法会放弃。

生产者消费者模型作用:

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

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


  • 线程池的作用:避免频繁的创建销毁线程,达到对线程的重用,线程池还可 以根据项目灵活地控制并发的数目。
    线程池队列满了,若再提交任务时会发生:若使用无界队列即 LinkedBlockingQueue 则继续添加任务到阻塞队列中等待执行:若使用 有界队列ArrayBlockingQueue 任务首先会被添加到此队列中,此队列满 了则会使用拒绝策略RectedExecutionHandler处理满了的任务,默认是AbortPolicy。

单例模式的线程安全意味着:某个类的实例在多线程坏境下只会被创建一次 出来。 恶汉式单例模式–线程安全;双检锁单例模式–线程安全;懒汉式 单例模式–非线程安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值