1.什么是多线程编程?什么时候使用?
多线程一般用于当一个程序需要同时做一个以上的任务。多线程通常用于GUI交互程序。一个新的线程被创建做一些耗时的工作,当主线程保持界面与用户的交互。
2.为什么wait(),notify()和notifyall()函数定义在Object类里面?
因为所有类都是继承于Object类,这样所有类就可以简单的进行多线程编程了。
3.wait()方法和sleep()方法有什么不同?
sleep()方法执行后仍然拥有线程,只是延时。而wait方法放弃了线程控制,其它线程可以运行。
4.Thread和Runnable有什么不同?
JAVA线程控制着程序执行的主路径。当你用java命令调用JVM时,JVM创建了一个隐式线程来执行main方法。Thread类提供了主线程调用其它线程并行运行的机制。
Runnable接口定义了一个能被Thread运行的类。实现Runnable的类只需要实行run方法。可以很灵活的扩展现在的已经继承自其它父类的类。而thread则不可以,因为java只允许继承一个父类。
5.我可以重载start()方法么?
因为Thread类的start()方法并不是final方法,因此可以,但不推荐这样做。因为在start()方法里创建一个新的线程,进行特定的操作。你可以传递一个实现了Runnable接口的类到Thread,或者继承Thread类,重载run()方法。
6. SwingUtilities.invokeLater(Runnable)方法是用来做什么用的?
这个方法可以在不干扰GUI的事件队列的情况下在应用程序中执行一个线程。它将runnable对象放在事件的队列中然后立即返回。只有当这个队象移到队列的最前端时它的run()方法才被调用。
7.volatile是用来做什么的?
volatile 的意思是变量的值不能被JVM优化,这样可以在某一程度上保证变量的可见性。
8.什么是绿色线程?
绿色线程是指所有的代码JVM都执行在单个操作系统线程,即使是多线程程序,JVM间断的控制多线程程序而不是用其它的操作系统线程,这种模式已经被废弃了。
9.编译运行下面的代码会发生什么?
A.编译错误,Thread类中的run方法没有定义
B.运行时错误,Thread类中的run方法没有定义
C.编译无错,打印0到9.
D.编译无错,不打印任何值
答案:D,调用run不创建线程。
10.关于下面一段代码,哪些描述是正确的
-
public class Agg {
-
public static void main(String argv[]) {
-
Agg a = new Agg();
-
a.go();
-
}
-
-
public void go() {
-
DSRoss ds1 = new DSRoss("one");
-
ds1.start();
-
}
-
}
-
-
class DSRoss extends Thread {
-
private String sTname = "";
-
-
DSRoss(String s) {
-
sTname = s;
-
}
-
-
public void run() {
-
notwait();
-
System.out.println("finished");
-
}
-
-
public void notwait() {
-
while (true) {
-
try {
-
System.out.println("waiting");
-
wait();
-
} catch (InterruptedException ie) {
-
}
-
System.out.println(sTname);
-
notifyAll();
-
}
-
}
-
}
A.编译错误
B.能够编译,输出“waiting"
C.能够编译, 输出“waiting",紧接着输出"finish"
D.运行时错误,会抛异常
答案:D,wait必须在Synchronize块或者函数里。
11.编译运行下面的代码会发生什么
-
public class Test extends Thread {
-
private String sThreadName;
-
-
public static void main(String argv[]) {
-
Test h = new Test();
-
h.go();
-
}
-
-
Test() {
-
}
-
-
Test(String s) {
-
sThreadName = s;
-
}
-
-
public String getThreadName() {
-
return sThreadName;
-
}
-
-
public void go() {
-
Test first = new Test("first");
-
first.start();
-
Test second = new Test("second");
-
second.start();
-
}
-
-
public void start() {
-
for (int i = 0; i < 2; i++) {
-
System.out.println(getThreadName() + i);
-
try {
-
Thread.sleep(100);
-
} catch (InterruptedException e) {
-
System.out.println(e.getMessage());
-
}
-
}
-
}
-
}
A.编译错误
B.输出first0, second0, first1, second1.
C.输出first0, first1, second0, second1.
D.运行时错误
答案:C,如果要实现B的效果的话应该重载run,而不是start
12.编译运行下面的代码会发生什么
-
public class Test {
-
public static void main(String argv[]) {
-
Pmcraven pm1 = new Pmcraven("one");
-
pm1.run();
-
Pmcraven pm2 = new Pmcraven("two");
-
pm2.run();
-
}
-
}
-
-
class Pmcraven extends Thread {
-
private String sTname = "";
-
-
Pmcraven(String s) {
-
sTname = s;
-
}
-
-
public void run() {
-
for (int i = 0; i < 2; i++) {
-
try {
-
sleep(1000);
-
} catch (InterruptedException e) {
-
}
-
yield();
-
System.out.println(sTname);
-
}
-
}
-
}
A.编译错误
B.输出One One Two Two
C.输出One Two One Two
D.输出One Two One Two
答案B 调用run不创建线程。仍然是同步。
来源:http://blog.sina.com.cn/s/blog_4127feea0100m2kj.html
相关推荐
以下是一些关于Java多线程的面试题及其答案,涵盖了基础概念、并发控制、线程安全以及性能优化等方面。 1. **什么是Java多线程?** 多线程是指在单个程序中同时执行多个线程,这样可以提高应用程序的效率和响应...
了解这些核心概念后,开发者可以更好地应对Java多线程面试中可能出现的问题,同时也能在实际项目中灵活运用多线程技术,提升程序性能。多线程编程虽然复杂,但掌握好相关的工具和原理,就能有效地解决并发问题,编写...
Java多线程面试题是Java程序员面试中常见的部分,尤其在金融行业的电子交易系统开发中,对并发处理能力的要求非常高。以下是对这些面试题的详细解答: 1) 保证线程顺序执行:可以通过调用`Thread.join()`方法实现。...
以下是对Java多线程面试题59题集合中可能涉及的一些关键知识点的详细解析。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写其run()方法。 - 实现Runnable接口:创建一个实现...
本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式...
### 15个顶级Java多线程面试题答案解析 #### 1. 如何保证线程执行顺序(T1→T2→T3) 在Java多线程编程中,有时我们需要控制线程的执行顺序。例如,有T1、T2、T3三个线程,我们希望T2在T1执行完毕后再执行,T3则需...
### 15个顶级Java多线程面试题及回答解析 #### 1. 线程执行顺序控制 - **题目**: 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? - **解析**: 这个问题考察了面试者对于`join()`...
以下是对Java多线程面试题及答案的详细解释: 1. **多线程的作用** - **发挥多核CPU的优势**:多线程能让程序在多核CPU上并行执行,充分利用硬件资源,提高程序运行效率。单核CPU虽然可以通过快速线程切换模拟并发...
Java 多线程面试题.one
由于【部分内容】中提供的信息非常杂乱,缺乏连贯性和上下文,因此下面的知识点将基于Java多线程及并发编程的通用知识点进行构建,以确保满足15个顶级JAVA多线程面试题及回答的知识要求。 首先,在Java多线程面试中...
Java多线程是Java编程中的核心概念...以上仅是40道Java多线程面试题中的一部分,每道题目背后都涉及到Java多线程编程的深度理解。熟练掌握这些知识点,不仅能在面试中表现出色,还能提高编写高效、稳定并发代码的能力。
这份“史上最全 Java 多线程面试题及答案”文档,无疑是你准备面试或深入理解Java并发编程的绝佳资源。以下是根据标题和描述中涉及的Java多线程知识点的详细说明: 1. **线程与进程**:线程是程序执行的最小单位,...
以下是对给定文件中提到的Java多线程面试题的详细解答: 1. **线程执行顺序控制**:使用`Thread.join()`方法可以确保一个线程在另一个线程执行完毕后再开始执行。例如,`T1.join()`会让`T2`等待`T1`完成后才开始,...
15个顶级Java多线程面试题及答案.pdf
以下是一些在面试中经常被问到的Java多线程面试题及其详解: 1. **什么是线程?** 线程是操作系统分配CPU执行时间的基本单位,它是程序执行的最小单元,一个进程可以包含多个线程。 2. **Java中如何创建线程?** ...