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
网友评论