多线程常见面试题

1)现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行?

  • 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟
    悉。这个多线程问题比较简单,可以用 join 方法实现。

2)在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

lock 接口在多线程和并发编程中最大的优势是它们为读和写分别提供了锁,它能满足你写像
ConcurrentHashMap 这样的高性能数据结构和有条件的阻塞。

 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3 import java.util.Random;
 4 import java.util.concurrent.locks.ReadWriteLock;
 5 import java.util.concurrent.locks.ReentrantReadWriteLock;
 6 
 7 
 8 
 9 
10 public class JoinTest2 {
       
11   
12     public static void main(String[] args) {
     
13         final TheData theData = new TheData();
14         for(int i=0;i<4;i++){
   
15             new Thread(new Runnable() {
   
16                 @Override
17                 public void run() {
   
18                     theData.get();
19                 }
20             }).start();
21         }
22         for(int i=0;i<4;i++){
   
23             new Thread(new Runnable() {
   
24                 @Override
25                 public void run() {
   
26                     theData.put(new Random().nextInt(1000));
27                 }
28             }).start();
29         }        
30     }  
31     
32 
33 } 
34 
35 class  TheData{
   
36     private Integer data = 0;
37     private ReadWriteLock rwLock = new ReentrantReadWriteLock();
38     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
39     public void get(){
   
40         rwLock.readLock().lock();//读锁开启,读进程均可进入
41         try{
   //用try finally来防止因异常而造成的死锁
42             System.out.println(Thread.currentThread().getName()+"read lock is ready.."+sdf.format(new Date()));
43             Thread.sleep(1000);
44             System.out.println(Thread.currentThread().getName()+"read data is"+data);
45         }catch (InterruptedException e) {
   
46             e.pri
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值