不安装jdk运行java程序详解 java不是内部命令( 二 )


9.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式可以用来创建线程:
?继承Thread类
?实现Runnable接口
?应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类 。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口 。同时,线程池也是非常高效的,很容易实现和使用 。
10.同步方法和同步代码块的区别是什么?
在Java语言中,每一个对象有一把锁 。线程可以使用synchronized关键字来获取对象上的锁 。synchronized关键字可应用在方法级别(粗粒度锁:这里的锁对象可以是This)或者是代码块级别(细粒度锁:这里的锁对象就是任意对象) 。
11.什么是死锁(deadlock)?
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁 。结果就是两个进程都陷入了无限的等待中 。
代码表示:
代码描述:
public class DieLockDemo {
public static void main(String[] args) {
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);
dl1.start();
dl2.start();
}
}
*…理想状态下dl1线程为true从if执行先打出”if objA”然后再接着打出”if objB”之后释放A、B的锁对象,之后dl2线程执行else语句打出”else objB”,”else objA” 。
非理想状态下dl1先打出”if objA”,之后线程dl2执行打出”else objB”,然后1、2线程的锁对象A和B都处于被锁的状态,两个线程争夺锁对象发生死锁现象 。..*
public class DieLock extends Thread {
private boolean flag;
public DieLock(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (MyLock.objA) {
System.out.println(“if objA”);
synchronized (MyLock.objB) {
System.out.println(“if objB”);
}
}
} else {
synchronized (MyLock.objB) {
System.out.println(“else objB”);
synchronized (MyLock.objA) {
System.out.println(“else objA”);
}
}
}
}
}
12.如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁 。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了 。
13.Java集合类框架的基本接口有哪些?
Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类 。Java集合类里面最基本的接口有:
?Collection:代表一组对象,每一个对象都是它的子元素 。
?Set:不包含重复元素的Collection 。
?List:有顺序的collection,并且可以包含重复元素 。
?Map:可以把键(key)映射到值(value)的对象,键不能重复 。
14.什么是迭代器(Iterator)?
Iterator接口提供了很多对集合元素进行迭代的方法 。每一个集合类都包含了可以返回迭代器实例的迭代方法 。迭代器可以在迭代的过程中删除底层集合的元素 。
15.Iterator和ListIterator的区别是什么?
下面列出了他们的区别:
?Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List 。
?Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向 。
?ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等 。
16.Java中的HashMap的工作原理是什么?


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: