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();
	}
}

原文地址:http://blog.51cto.com/12222886/2059530

时间: 2024-11-10 14:04:57

java线程与并发编程实践(一)的相关文章

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

一.交换器 交换器提供了一个线程之间能够交换对象的同步点.每个线程都会往这个 交换器的exchange()方法传入一些对象,匹配伙伴线程,同时接受伙伴对象作为返 回值.java.util.conurrent.Exchange<V>实现了交换器. 下面是一个代码小实例: import java.util.concurrent.Exchanger;   import java.util.concurrent.ExecutorService;   import java.util.concurren

Java线程与并发编程实践----锁框架

Java.util.concurrent.locks包提供了一个包含多种接口和类的框架,它 针对条件进行加锁和等待.不同于对象的内置加锁同步以及java.lang.Object的等 待/通知机制,包含锁框架的并发工具类通过轮询锁.显示等待及其它方式改善这种 机制. 锁框架包含了经常使用的锁.重入锁.条件.读写锁以及冲入读写锁等类别. 一.锁(Lock) Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作.此实 现允许更灵活的结构,可以具有差别很大的属性,可以

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

java5之前,我们使用诸如synchronized,wait(),notify()方法对线程的操作属于对 底层线程的操作,这样会出现很多的问题: 低级的并发原语,比如synchronized,wait(),notify()经常难以正确使用.误用会导致 竞态条件,线程饿死,死锁等风险. 泰国依赖synchronized会影响程序性能以及程序的可扩展性 开发者经常需要高级线程结构,如线程池,信号量.java对底层线程的操作不包含这些结. 为解决这些问题,java5引入并发工具类,该工具类主要有下面

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

Java提供的synchronized关键字对临界区进行线程同步访问.由于基于synchronized很难 正确编写同步代码,并发工具类提供了高级的同步器.倒计时门闩(countdown latch).同步屏 障(cyclic barrier).交换器(exchanger).信号量(semaphore)以及phaser同步器.下面主要 介绍倒计时门闩. 倒计时门闩会导致一条或多条线程在"门口"一直等待,直到另一条线程打开这扇门,线程 才得以继续运行.他是由一个计数变量和两个操作组成的,

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

一.并发集合 java.util包下提供了很多的集合类,如ArrayList.TreeSet.HashMap,但是这些 集合都是非线程安全的,并且对于单列集合的迭代器,采用的是快速失败机制,当正在迭代 遍历的集合被其它线程修改时,便会抛出 java.util.ConcurrentModificationException. 这显然对于多线程操作的集合是十分不方便的,但早Colections这个工具类中有方法可以返回 线程安全的集合,然而这种集合对于高并发环境,性能十分低下. 于是,java.ut

Java线程与并发编程实践----等待通知(生产者消费者问题)线程

Java提供了一套API来支持线程之间的交互.在Object类中提供了一套等待通知的API  wait()     notify()     notifyAll()     此处要注意的是,绝不要在循环外面调用wait()方法.(单独开一片文章来讨论)     下面使用消费者与生产者问题来展示以上API的使用: package xiancheng; public class PC { public static void main(String[] args) { Shared s = new 

[Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性

根据<Java并发编程实践>一书整理的思维导图.

[Java 并发] Java并发编程实践 思维导图 - 第一章 简介

阅读<Java并发编程实践>一书后整理的思维导图.

读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例

在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public