线程如何同步和通讯。
可以使用同步代码块,或者使用Synchronized来修饰某个方法。
并行与并发有什么区别?
并行:多个处理器同时处理多个任务。
并发:多个任务在同一CPU核上交替执行,从逻辑上看那些任务是同时执行。
线程与进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行顺序。
线程的状态有哪些
五种状态:创建,就绪.运行.阻塞,死亡
创建:生成对象后,还没调用start()方法.此时处于创建状态
就绪:调用start()方法后,线程处于就绪状态;
运行:当系统设置为当前线程时,开始执行run()方法体
阻塞:线程正在运行时,被暂停,通常是调用了sleep,wait都会导致线程阻塞。
死亡:如果run()执行结束或者调用stop方法后,该线程死亡。
sleep()和wait()的区别
sleep():Thread类的静态方法,使线程进入阻塞状态,如果线程拥有锁,则不会释放锁
wait():Object中的方法,使线程进入等待池中,同时释放锁,等着其他线程使用notify或者notifyAll方法来唤醒线程。
Notify和NotifyAll()有什么区别
NotifyAll()调用后,会把所有线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功,则留在锁池等待锁被释放后继续参与竞争。而notify只会唤醒一个线程,唤醒哪一个由虚拟机控制。
线程的run和start有什么区别?
Start方法用于启动线程,run方法用于执行线程的运行时代码。
run可以重复调用,而start只能调用一次。
创建多线程的几种方式?
继承Thread类 实现Runnable接口 实现Callable接口
在java程序中怎么保证多线程的运行安全?
使用安全类。比如java.Util.Concurrent下面的类
使用自动锁synchronized(关键字,无法判断是否获取锁的状态,会自动释放锁)
使用手动锁lock。(类,可以判断是否获取到锁,需要手动释放锁)
Collable和Runnable的区别
Collable可以拿到返回值,Runnable没有返回值,Callable可以看做是Runnable的补充。
线程死锁是什么?如何解决?
线程死锁就是多个线程同时被阻塞,抢夺同一资源。
1.加锁时间:超时某个时间就放弃获取锁 。
2.死锁检测:检测线程是否发生死锁,如果发生死锁就执行一定的策略。如中断线程或者回滚操作。