多线程总结 定义: 线程就是运行不同功能代码的执行路劲,控制单元,每一个引应用程序至少有一个活的线程 创建线程的方式有两种: 1.继承Thread类,覆盖run方法。建立子类对象,调用start(); 2.实现Runnable接口,实现run方法,建立Thread对象,调用start方法。 问题的引发,多个线程操作同一个数据的时候引发的安全问题。为保证数据的准确性,使用同步技术Synchronized。 同步代码: 当一个线程去操作数据的时候,如果没有操作完毕。其余的线程无法操作。去操作数据的线程必须要拿到对象锁,没有拿到的线程,处于零时阻塞的状态。(对象锁最好实用字节码文件,因为字节码文件只有一份) 死锁: 同步中嵌套同步。多个线程抢用一把锁。 线程的状态: 被创建、运行、冻结、临时阻塞、消亡。 Sleep和wait的区别: Sleep() 线程休眠,但是不释放锁。其他线程获取不到锁 Wait() 线程等待,但是释放锁,可以由其他程序来执行,等待唤醒后,还要重新获取锁,才能执行。 生产者与消费者: Notify 唤醒单个线程 notifyAll 唤醒多个线程 JDK1.5新特性: 使用步骤: 1 通过Lock接口的实现类对象,获取ReentrantLock子类对象。 2 通过创建newCondition对象。可以创建多个。 3 获取锁 Lock.lock方法 。 4 使用await方法。 5 唤醒线程。Condition.signal(); 6 释放锁 Lock.unlock();(必须要释放) 其他的方法: 1 Interrupt() 停止线程的方法。引发异常停止 2 setDaemon(true) 守护线程 3 join() 等待线程终止 4 static 一led() 线程的让步
|