创建线程有哪几种方式?
继承Thread类实现run方法
实现Runnable接口
实现Callable接口
runnable和callable的区别:
runnable没有返回时callable有返回值,callable是runnable的补充。
线程和进程的区别:
一个应用程序必须有一个进程,而进程下可以有多个或一个线程,线程又被称作轻量级进程
并行和并发有什么区别:
并行:多个服务器或多个核心数同时执行多个任务;
并发:多个任务同时在一个服务器或核心上交替执行;
线程有哪些状态:
new:尚未启动
runnable:执行中
blocked:阻塞
waiting:永久等待状态
terminated:等待指定的时间重terminated 执行完成
sleep和wait有什么区别:
sleep来自Thread类,wait来自object类
释放锁:sleep() 不释放锁;wait() 释放锁
sleep到时间会自动恢复wait()可以通过notify和notifyAll唤醒线程
notify() 和 notifyAll() 有什么区别:
notify唤醒一个线程,notifyAll唤醒所有线程
在 Java 程序中怎么保证多线程的运行安全:
1.使用线程安全类 java。util. concurrent
2.使用自动锁:synchronized
3.使用手动锁:lock
什么是死锁:
相互占用对方锁,又等对方先释放自己的锁而造成的线程堵塞。
如何解决:
尽量减少同步代码块。
尽量不要多功能使用同一个锁。
尽量使用 Java. util. concurrent 并发类代替自己手写锁。
synchronized 和 Lock 有什么区别?
synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。
synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 lock 需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁。
通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。