java线程与并发编程实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程与并发编程实践相关的知识,希望对你有一定的参考价值。

一、给出线程的定义

    线程就是一条在程序代码中独立执行的路径

二、给出runnable的定义

    一个runnable就是一段封装在对象中的代码序列,它的类实现了runnable接口

三、Thread类和runnable接口完成了什么?

    类Thread提供了一个底层操作系统的线程架构的统一接口。Runnable接口为关联了Thread对象的线程提供了执行代码。

四、指出创建一个Runnable对象的两种方式?

    创建一个实现Runnable接口的匿名类或者lambda表达式

Runnable r = new Runnable() {                //匿名类,实现Runnable接口
			
			@Override
			public void run() {
				System.out.println("MyThread");
			}
		};


Runnable r = () -> System.out.println("MyThread");        //lambda表达式

五、指出关联一个runnable到一个Thread对象的两种方式?

    a.把一个runnable对象传入到Thread的构造器中

    b.继承Thread类重写它的run()方法,因为Thread类也实现了runnbale接口

六、指出5种Thread的状态

    线程名称、线程存活的标识、线程的执行状态、线程的优先级、线程是否为守护线程

七、默认线程的名字会以Thd-作为前缀吗?

    不对,以Thread-作为前缀

八、如何给线程赋予非默认的名称?

    可以通过Thread的构造函数进行传入,也可以调用setName()方法,指定名称

九、如何确定线程是死是活?

    使用isAlive()方法判断

十、指出Thread.State枚举的常量

    NEW:该状态下线程还没有开始执行

    RUNNABLE:该状态下线程正在JVM中执行

    BLOCKED:该状态下线程被阻塞,正在等待一个监听锁

    WAITING:该状态下线程无限制的等待另外一个线程执行特定的操作

    TERMINATED:该状态下线程已经退出

十一、如何获取当前线程的执行状态

    调用Thread.State或者调用getState()方法

十二、优先级的定义

    优先级是指,线程的相对重要性

十三、如何通过setPriority()来影响应用程序跨操作系统的可移植性?

    使用setPriority()会影响应用程序在操作系统之间的可移植性,因为不同的调度器会采用不同的方式来处理优先级

十四、确定Thread的void setPriority(int priority)参数的取值范围

    介于Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间

十五、当应用程序的最后一个非守护线程死亡之后,守护线程也会自动死亡以使得应用程序退出

    正确

十六、在一个正在运行或者已经死亡的Thread对象上调用Thread的void start()方法会发生什么?

    会抛出java.lang.IllegalThreadStateException

十七、如何终止windows上一个无法停止的程序

    ctrl+c

十八、组成Thread中断机制的所有方法

    interrupt()

    interrupted()

    isInterrupted()

十九、isInterrupted()方法清除了线程的中断状态

    错误,不影响

二十、当线程中断时,该线程如何反映?

    抛出InterruptedException

二十一、给出忙循环的定义

    设计来消耗时间的一条循环语句

二十二、指出让一条线程等待另一个线程直至死亡的方法

    join()

二十三、指出让一条线程睡眠的Thread方法

    sleep()

二十四、编写一个名为IntSleep的应用程序,其创建一条后台线程,不断地打印出Hello,之后睡眠100ms。在睡眠了2s之后,默认主线程应该中断后台线程,此线程在打印出interrupted之后跳出循环

public class IntSleep {

	public static void main(String[] args) {
		Runnable r = new Runnable() {
			@Override
			public void run() {
				while(true) {
					System.out.println("Hello");
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						System.out.println("Interrupted");
						break;
					}
				}
			}
		};
		Thread t = new Thread(r);
		t.start();
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
		}
		t.interrupt();
	}
}


以上是关于java线程与并发编程实践的主要内容,如果未能解决你的问题,请参考以下文章

Java线程与并发编程实践----同步器(倒计时门闩)

Java线程与并发编程实践----同步器(交换器信号量)

Java线程与并发编程实践----额外的并发工具类

Java线程与并发编程实践----并发工具类与Executor框架

Java线程与并发编程实践----同步

Java线程与并发编程实践----额外的线程能力