Java多线程面试题

1、在Java中什么是进程,什么是线程

  • 进程:进程是程序执行的一个实例,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
  • 线程:有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

在java中,进程大致等于JVM,线程属于JVM,线程可以被java应用程序在运行时动态的创建和停止。

2、Java程序中至少有几个线程?
每个java程序在main线程内执行,因此每个java程序至少有一个线程

3、每一个Java线程都有哪些属性

  • 线程的标识符id
  • 线程的名称
  • 线程优先级
  • 线程的状态
  • 线程所属的线程组

4、线程有哪些状态

  • NEW:初始状态,线程被构建,但是还没有调用start方法
  • RUNNABLE:运行状态,Java线程将被操作系统中的就绪和运行两种状态笼统的称作运行中
  • BLOCKED:阻塞状态,表示线程阻塞于锁
  • WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其它线程做出一些特定的动作(通知或中断)
  • TIME_WAITING: 超时等待状态,该状态不同于WAITING,它可以在指定的时间内自行返回的
  • TERMINATED:终止状态,表示当前线程已经执行完毕

JDK安装目录下bin目录下执行命令jstack工具可以查看代码运行时的线程信息。

5、线程的创建方式

  • 继承Thread类创建线程类
  • 实现Runnable接口

一般实现Runnable接口的方式更好一些,关于两者的对比,Thread和Runnable的区别

6、线程为什么不能通过Stop方法停止
stop方法过于暴力,会直接终止线程,并且立即释放这个线程所持有的锁,而这些锁是用来维持对象一致性的,如果此时,写线程写入的数据正写入一半,并强行终止,那么对象就会被写坏,同时由于锁已经被释放,另外一个等待该锁的读线程就顺利成章的读到了这个不一致的问题。 --- 《Java高并发程序设计》. 并行程序基础

7、下面的程序会输出什么

public class MultiThreading {
    private static class MyThread extends Thread {
        public MyThread(String name) {
            super(name);
        }
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
        public static void main(String[] args) {
            MyThread myThread = new MyThread("myThread");
            myThread.run();
            myThread.start();
        }
    }
}

调用run方法时,是在main线程内部执行的。

main
myThread

8、什么是Daemon线程
守护线程是一种特殊的线程,在后台默默的完成一些系统性的服务,比如垃圾回收,JIT线程就可以理解为守护线程。与之对应的是用户线程,用户线程可以理解为系统的工作线程,它会完成程序应该要完成的业务操作,如果用户线程全部结束,就意味着这个程序无事可做了,当一个Java应用内,只有守护线程时,Java虚拟机就会自然退出。

守护线程必须在线程start之前设置,否则会抛出IllegalThreadStateException

9、在Java中,那些操作是原子性的?

  • 读和写的操作变量是 主类型的(primitive variables)除了long 和 double
  • 读和写的变量声明了volatile

你可能感兴趣的:(Java多线程面试题)