018--为什么需要线程+面试题

VIP免费
2024-12-11 1 0 149.11KB 11 页 5.9玖币
侵权投诉
为什么需要线程 + 面试题
线程介绍
线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线
程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、
更加轻量化,因而也被称为轻量级的进程。
什么是进程
进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是
操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统资源。简单来
说,进程可以被当做是一个正在运行的程序。
为什么需要线程
程序的运行必须依靠进程,进程的实际执行单元就是线程。
为什么需要多线程
多线程可以提高程序的执行性能。例如,有个 90 平方的房子,一个人打扫需要花费 30
分钟,三个人打扫就只需要 10 分钟,这三个人就是程序中的 多线程 。
线程使用
线程的创建,分为以下三种方式:
继承 Thread 类,重写 run 方法
实现 Runnable 接口,实现 run 方法
实现 Callable 接口,实现 call 方法
下面分别来看看线程创建和使用的具体代码。
1)继承 Thread
请参考以下代码:
class ThreadTest {
public static void main(String[] args) throws Exception {
MyThread thread = new MyThread();
thread.start();
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread");
}
}
以上程序执行结果如下:
Thread
2)实现 Runnable 接口
请参考以下代码:
class ThreadTest {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
new Thread(runnable).start();
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable");
}
}
以上程序执行结果如下:
Runnable
3)实现 Callable 接口
请参考以下代码:
class ThreadTest {
public static void main(String[] args) throws Exception {
MyCallable callable = new MyCallable();
// 定义返回结果
FutureTask<String> result = new FutureTask(callable);
// 执行程序
new Thread(result).start();
// 输出返回结果
System.out.println(result.get());
}
}
class MyCallable implements Callable {
@Override
public String call() {
System.out.println("Callable");
return "Success";
}
}
以上程序执行结果如下:
Callable
Success
可以看出,Callable 的调用是可以有返回值的,它弥补了之前调用线程没有返回值的情
况,它是随着 JDK 1.5 一起发布的。
4JDK 8 创建线程
JDK 8 之后可以使用 Lambda 表达式很方便地创建线程,请参考以下代码:
new Thread(() -> System.out.println("Lambda Of Thread.")).start();
线程高级用法
线程等待
使用 wait() 方法实现线程等待,代码如下:
System.out.println(LocalDateTime.now());
Object lock = new Object();
Thread thread = new Thread(() -> {
synchronized (lock){
try {
// 1 秒钟之后自动唤醒
lock.wait(1000);
System.out.println(LocalDateTime.now());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
以上程序执行结果如下:
2019-06-22T20:53:08.776
2019-06-22T20:53:09.788
注意:当使用 wait() 方法时,必须先持有当前对象的锁,否则会抛出异常
java.lang.IllegalMonitorStateException
线程唤醒
使用 notify()/notifyAll() 方法唤醒线程。
notify() 方法随机唤醒对象的等待池中的一个线程;
notifyAll() 唤醒对象的等待池中的所有线程。
使用如下:
Object lock = new Object();
lock.wait();
lock.notify();
// lock.notifyAll();
摘要:

为什么需要线程+面试题线程介绍线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,因而也被称为轻量级的进程。什么是进程进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统资源。简单来说,进程可以被当做是一个正在运行的程序。为什么需要线程程序的运行必须依靠进程,进程的实际执行单元就是线程。为什么需要多线程多线程可以提高程序的执行性能。例如,有个90平方的房子,一个人打扫需要花费30...

展开>> 收起<<
018--为什么需要线程+面试题.docx

共11页,预览3页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:11 页 大小:149.11KB 格式:DOCX 时间:2024-12-11

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 11
客服
关注