面试题【三】

1、java实现线程有哪几种方式?

 a、继承Thread类,然后调用start方法

b、实现Runable接口的run方法,然后再用Thread类包裹后,调用start方法 

c、实现Callable接口中的call方法,用FutureTask类包裹Callable对象,然后再用Thread类包裹FutureTask类,并调用start方法,call()方法可以有返回值。

可以捕获线程上的异常;

可以通过get方法得到返回值

get方法阻塞当前线程,直到调用的线程运行结束

可以取消线程运行

 2、多线程同步有哪几种方法?

3、Java中notify和notifyAll有什么区别?

notify()方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地。而notifyAll()唤醒所有的线程并允许他们争夺锁确保至少有一个线程能够运行。

4、为什么wait/notify/notifyAll这些方法不在thread类里面? 

java提供的锁是对象级的而不是线程级的。每个对象都有锁,通过线程获得,如果线程需要等待某些锁那么调用对象中的wait()方法就有意义啦,如果wait()方法定义在Thread类中,线程正在等待的是哪个锁就不明显了。换句话说这三种方法都是锁级别的操作。

5、启动线程方法start()和run()有什么区别? 

只有调用了start()方法,才会表现出多线程的特性。不同线程的run方法里面的代码交替执行,如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码

6、什么是线程池?线程池的好处? 

详情信息:https://blog.csdn.net/weixin_42558742/article/details/88659887

                  https://blog.csdn.net/weixin_42558742/article/details/88661357

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值