小白:知道,线程的同步就是保证多个线程的共同资源在同一时刻只有一个线程在使用和修改,保证数据的唯一和准确。
面试官:那么如何保证数据的唯一性和正确性呢?
小白:我知道的就是加锁,利用synchronized关键字对代码块、方法或者摸个对象加锁。
面试官:嗯,回答正确,那么如何实现同步呢,有哪些方法?
小白:呃 。。。。这个我就不知道了
线程的同步知识也是公司面试必考知识,同学们在去面试前一定要复习一下,下面就给大家复习一下线程的知识:
线程在执行过程中,可以处于下面几种状态:
线程的同步主要靠下面几个方法:
1、wait():使一个线程处于等待状态,并且释放所持有的对象的lock,注意wait的线程是不会自动唤醒的。 2、sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常,注意这个方法是不会释放锁的,而是持有锁停止多少秒后自动唤醒。 3、notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 4、notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。