15 其他问题

5. 三个线程如何实现交替打印ABC
6. 操作系统进程间通信方式?

管道、FIFO、消息队列、信号量、共享内存区

7. 线程间通信方式?

在java中,多个线程是通过写-读内存中的公共资源进行通信的。

8. 线程交互方式?

wait()、notify()

9. 怎么控制线程尽可能减少上下文切换?

无锁并发编程、CAS 算法、使用最少线程、使用协程

10. 守护线程、僵尸进程、孤儿进程,如何创建守护进程
  • 守护线程:是一种特殊的线程,用于完成一些系统性的任务,如果一个java应用只有守护线程,java虚拟机就会退出。
  • 僵尸进程:如果子进程已经终止,但是其父进程还没有获取其状态,这个进程就称之为僵尸进程.
  • 孤儿进程:如果父进程先退出,子进程还没退出,那么这些子进程将成为孤儿进程,孤儿进程会被init进程收养。
  • 如何创建守护线程:在调用线程的start()方法之前调用setDaemon()方法
11. 怎么优化锁(提高锁的性能)?
  • 减小锁持有时间
  • 减小锁粒度
  • 读写分离锁来替换独占锁
  • 锁粗化
  • 另外java虚拟机内部也对锁进行了优化:偏向锁、轻量级锁、自旋锁、锁清除
12. 多线程底层原理?

多个线程竞争CPU时间片,哪个线程获取了CPU时间片,就执行哪个线程。

13. 除了锁调度线程,还有什么方法调度线程?

sleep、wait、notify、notifyAll

14. 什么是公平锁,什么是非公平锁?
  • 公平锁:线程获取锁的顺序是按照线程申请锁的顺序来分配的,即先来先得的FIFO先进先出顺序
  • 非公平锁:线程获取锁的顺序是随机的,不是先到先得,导致某些线程可能一直拿不到锁,所以是不公平的
15. 停止线程的方法
  • 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
  • 使用stop方法强行终止线程。
  • 使用interrupt方法中断线程。
16. 为什么使用stop停止线程不安全?
  • 使用stop方法结束线程时,会直接终止线程,停止剩余的全部工作,包括在catch或finally语句中的,因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。
  • 使用stop停止会立即释放这个线程所持有的锁,导致数据得不到同步,可能会出现数据不一致的问题。
17. 协程是什么?线程与协程的区别?协程有哪些优势?把所有多线程都替换成协程可以嘛?
  • 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。
  • 区别:
    ①协程属于线程,一个线程可以有多个协程,协程是用户态的轻量级线程。
    ②线程进程都是同步机制,而协程则是异步。
    ③线程是抢占式,而协程是非抢占式的。
    ④协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
  • 优势:没有线程切换的开销,上下文的切换非常快。
18. happen before原则
  • 程序顺序原则:在一个线程内一段代码的执行结果是有序的。
  • volatile变量规则:就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作的结果一定对读的这个线程可见。
  • 锁规则:解锁必然发生在随后的加锁前。
  • 传递规则:A先于B,B先于C,那么A必然先于C。
  • 线程的start()方法先于它的每一个操作。
  • 线程的所有操作先于线程的终结。
  • 线程的中断先于被中断的代码。
  • 构造函数的执行的结束先于finalize()方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值