1.什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运行单位。
2.线程与进程?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务,不同的进程使用不同的内存空间,所有的线程共享一片相同的内存空间。每个线程都拥有单独的栈内存来存储本地数据。
3.实现线程?
实现Runnable接口,继承Thread类。
4.如果选择实现接口或者继承?
单继承,你的明白!
5.Java中的Runnable和Callable有什么不同?
都代表那些要在不同的线程中执行的任务,Runnable从jdk.10开始就有了,Callable是在JDk1.5增加的,主要区别:Callable中的call()方法可以返回值和抛出异常,Runnable的run()方法没有这些功能,Callable可以返回装载计算结果的Future对象。
6.Java中的CountDownLatch和CyclicBarrier有什么不同?
前者为减计数方式,后者加计数方式
前者计算为0时释放所有等待的线程,后者计数达到指定值时释放所有等待线程
前者计数为0,无法重置,后者计数达到指定值,又置0重新开始
前者调用countDow()方法计数减1,调用await()方法只进行阻塞,对计数没有任何影响;后者调用await()方法计数加1,若加1后值不等于构造方法的值,则线程阻塞
前者不可重复利用,后者可以重复利用。
7.java内存模型是什么?
java内存模型规定和指引java程序在不同的内存架构,CPU和操作系统间有确定性行为。在多线程的情况下尤为重要,java内存模型对一个线程所能做的变动能被其他线程可见提供了保证。
主要3点:单线程程序,不会有可见性问题。
正确的多线程程序,程序的执行结果和该程序在顺序一致性内存模型中的执行结果相同。
未同步或未正确同步的多线程,最小安全性,要么读到某个线程写入的值,要么默认值为0.
8.volatile
只有成员变量才能使用它,volatile可以保证下一个读取操作会在前一个写操作之后发生.
9.Vector
Vector是用同步方法来实现线程安全
10.java中什么是竞态条件?
多线程对一些资源的竞争的时候就会产生竞态条件,如果要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定bugs,这种bug很难发现且会重复出现.