什么是线程?
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编栓,你可以使用多线程对运算密集型任好提速。比如,如果个线程完成一个任务要100毫秒
,那么用十个线程完成政任务只需10毫秒,Java在塔言 层面对多找程提供了卓越的支持,它也是一个很好的突点。
2)线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线屋,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享-片相同的内存空间。别把它和线内存摘混每个线程部拥有单独的钱内存用来存情本地数据。
3)如何在Java中实现线程?
在语言云面有两种方式。jJava.lang.Thread 类的实例就是个线程但是它需要周用java lang
Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread
英或者直接调用Runnable接口来里写run0方法实现线程。
4)用Runnable还是Thread?
这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者用用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持关的多重继承。但允许你调用多个接口。所以如果你继承其他类,当然是调用Runnable接口好了。
4) Java中如何停止个线程?
Java提供了很丰富的AP1但没有为停止线程提供APL. JDK 10本来有一些象stop0.
suspend0和resume0的控制方法但是由于潜在的死模成胁因此在后续的IDK版本中他们被弃用了,之后Java
AP的设计者就没有提供一个兼容且线程安全的方法来停止一 个线程。 当run0 或者call
方法执行完的时候线程会自动结束如果要手动结束个线程,你可以用volatile布尔变量来退出run0方法的循环或者是取消任务来中断线程。
5)一个线程运行时发生异常会怎样?
简单的说,如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是
用于处理未捕获异常造成线程突然中断情况的一个内嵌接口,当个未博获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler0来查询浅程的UncaughtExceptionHandler井将线程和异常作为参数传递始handier的uncaughtException()方法进行处理
6 )如何在两个线程问共享数据?
常规实现方法:
将数据抽象成一个类,并将对这个数据的操作作为这个类的方法,这么设计可以和容易做到同步,只要在方法上加”synchronized“
将Runnable对象作为一个类的内部类,共享数据作为这个类的成员变量,每个线程对共享数据的操作方法也封装在外部类,以便实现对数据的各个操作的同步和互斥,作为内部类的各个Runnable 对象调用外部类的这些方法。
7) Java中inotify和notityAlI有什么区别?
因为多线程可以等待单监控锁,Java
API的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。notily0方法不能唤醒某个具体的线程,所以只一个钱程在等
待的时候它才有用武之地。而ntifAll)起醒所有线程并允许他们争夺就确保了至少有一个线程能继续运行。