java多线程三种方式区别
1)实现Runnable接口
定义线程类,实现Runnable接口,重写其public void run(),将此类的对象当做Thread类的构造函数中的参数
所有子线程公用一套run中代码
2)继承Thread类
所有子线程各有一套自己的run代码
3)使用ExecutorService,Callable,Future实现有返回结果的多线程
java多线程
1)进程是资源分配的最小单位,线程是处理机调度执行的最小单位;不同的进程有各自的逻辑地址,能共享物理地址,而同一进程的线程之间可以
共享部分逻辑地址,即:能共享堆内存,每个线程有自己的线程栈,寄存器,私有数据。
2)多线程的实现方式有:继承Runnable接口、继承Thread类、使用ExecutorService、Callable、Future实现有返回结果的多线程。
3)多线程时要处理线程同步问题,使用加锁的方式同时又要避免死锁的产生。
线程同步方式
互斥锁、读写锁、条件变量、信号量和令牌
线程同步加锁的方法
1)synchronized:修饰方法或修饰代码块
2)lock对象锁:lock()方法会对Lock实例对象进行加锁,因此所有对该对象调用lock()方法的线程都会被阻塞,直到该Lock对象的unlock()方法被调用。
wait与sleep区别
1)wait是Object类的方法,sleep是Thread类的方法
2)wait时必须有锁且放开,sleep时不一定有锁,有的话不放开
3)wait要靠别人叫醒或打断,sleep自己醒或被打断