Java多线程面试题
1、启动一个线程是调用run()方法还是start()方法? 启动一个线程是调用start()方法,是线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行,这并不意味着线程就会立即执行 2、请说出同步线程及线程调度相关的方法? wait():是一个线程等待(阻塞bolcked)状态,并且释放所持有的对象的锁 sleep():是一个正在运行状态的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常; notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关。 notifyAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得了锁的线程才能进入就绪状态。 注意:Java5通过Lock接口提供了 显式的锁机制 ,Lock接口中定义了加锁(lock()方法)和解锁(unlock()方法),增强了多线程编程的灵活性及对线程的协调。??? 3、线程和进程的区别? 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。 线程:是进程的一个实体