Java中的多线程-简答题

1.简述进程和线程的联系和区别。

(1)资源分配&处理器调度:进程是资源分配的基本单位,线程是处理器调度的基本单位。

(2)地址空间:进程拥有独立的地址空间;线程没有独立的地址空间,同一进程内多个线程共享其资源。

(3)划分尺度:线程更小,所以多线程程序并发性更高。

(4)执行:一个程序至少有一个进程,一个进程至少有一个线程。

2.创建线程的两种方式分别是什么?各有什么优缺点。

第一种方式:继承Thread类
实现步骤:
1.自定义类继承Thread
2.覆盖Thread中的run()方法
3.创建该类的对象,调用start()方法,开启线程并调用run方法
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。

第二种方式:实现Runnable接口

实现步骤:
1.定义一个实现Runnable接口的类
2.覆盖run方法
3.创建该类对象,并以该类对象为参数创建Thread类的对象,从而创建了一个线程
4.调用start方法,开启线程并调用run方法。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相 同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

3.请你简述sleep( )和wait( )有什么区别?

1.sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行。

2.wait()是线程交互时,如果线程对一个同步对象发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

4.Java中实现线程通信的三个方法及其作用。

  1. wait():导致当前线程等待,直到其他线程调用该同步监视器的notify()方法或notifyAll()方法来唤醒该线程。
  2. notify():唤醒在此同步监视器上等待的单个线程。
  3. notifyAll():唤醒在此同步监视器上等待的所有线程。

猜你喜欢

转载自blog.csdn.net/qq_44013790/article/details/85675591