Java 基础面试题(四)

Java 基础面试题(四)

1、线程的基本概念、线程的基本状态以及状态之间的关系。

线程
线程的基本状态
图解说明:调用线程start() 方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁之后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。
视频讲解链接:
进程线程
线程状态

2、同步和异步有什么异同?在什么情况下分别使用它们?举例说明。

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

视频讲解链接:
同步和异步理论理解
同步和异步例子解释

3、Java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop() 和 suspend() 方法为何不推荐使用?

在这里我们重点掌握两种线程的创建方法:

//方式一:new Thread{}.start{}; 表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread 的匿名子类的实例对象,子类加上run方法后的代码如下:
new Thread{
    public void run(){
    }
           }.start;
//方式二:new Thread(new Runnable(){}).start; 这表示调用Thread对象接受的Runnable对象:
new Thread(new Runnable(){
         public void run(){}
         }
         ).start();

用synchronized关键字修饰同步方法。
stop()和suspend()

视频讲解链接:
实现线程
synchronized
死锁

4、多线程有几种实现方法?同步有几种实现方法?

多线程有两种实现方法,分别是继承Thread类和实现Runnable接口。
同步的实现方法有两种:synchronized,wait 和 notify。

  • wait():使线程处于等待状态并释放所持有的对象的lock。
  • notify():唤醒一个处于等待状态的线程,注意在调用此方法的时候,并不难确切地唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
  • 在这里补充一个概念:allnotify():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

视频讲解链接:
继承Thread类
实现Runnable接口
wait()和notify()理论
wait()和notify()代码

5、启动一个线程是用run() 还是 start()?

启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run() 方法就是该线程所关联的执行代码。

视频讲解链接:
实现线程
run 和 start 的区别

6、sleep() 和 wait() 有什么区别?

思维导图:在这里插入图片描述

视频讲解链接:
wait() 和 notify()
sleep()
wait 和 sleep 的区别1
wait 和 sleep 的区别2

7、当一个线程进入一个对象的一个synchronized方法后,其他线程是否可以进入此对象的其他方法?

分几种情况:

  • 其他方法前是否加了synchronized关键字,如果没加,则能。
  • 如果这个方法内部调用了wait,则可以进入其他synchronized方法。
  • 如果其他方法都加了synchronized关键字,并且内部没有调用wait,则不能。
  • 如果其他方法是static的,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。

视频讲解链接:
synchronized 面试题1
synchronized 面试题2
synchronized 面试题3
synchronized 面试题4

8、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同。

synchronized 和 java.util.concurrent.locks.Lock 的异同

视频讲解链接:
synchronized 和java.util.concurrent.locks.Lock 的异同

9、介绍 Collection 架构。Collection框架中实现比较要实现什么接口?List,Set,Map 是否继承自 Collection 接口?

Collection框架中实现比较要实现comparable/comparator。List,Set是继承Collection接口,但是Map不是。

视频讲解链接:
Collection

10、Collection 和 Collections 的区别?

Collection 和 Collections 的区别

视频讲解链接:
Collections 工具类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值