线程问题

创建线程有哪几种方式?
继承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 却无法办到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值