美文网首页
Java多线程(Interview)

Java多线程(Interview)

作者: 渐进逾 | 来源:发表于2020-03-18 09:22 被阅读0次
    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、线程的创建方式
    • 1.继承Thread类创建线程类

    • 2.实现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();
            }
        }
    }</pre>
    

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

    <pre style="margin: 0px; padding: 0px; color: rgb(28, 31, 33); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(248, 250, 252); text-decoration-style: initial; text-decoration-color: initial;">main
    myThread</pre>

    8、什么是Daemon线程

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

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

    9、在Java中,那些操作是原子性的?
    • 读和写的操作变量是 主类型的(primitive variables)除了long 和 double

    • 读和写的变量声明了volatile

    相关文章

      网友评论

          本文标题:Java多线程(Interview)

          本文链接:https://www.haomeiwen.com/subject/cezfyhtx.html