java 进程,线程,并行,并发,wait,sleep - 面试宝典
【摘要】 Java进程是指操作系统中正在运行的一个Java程序实例。每个Java进程都有自己的内存空间,可以独立运行,并且可以与其他进程进行通信。 Java线程是进程中的一个执行单元,一个进程可以有多个线程。线程是独立运行的,可以同时执行多个任务。Java线程是通过Thread类来创建和管理的。 并行是指两个或多个任务在同一时刻同时执行,需要多个执行单元。在Java中,可以通过多线程来实现并行执行。 ...
Java进程是指操作系统中正在运行的一个Java程序实例。每个Java进程都有自己的内存空间,可以独立运行,并且可以与其他进程进行通信。 Java线程是进程中的一个执行单元,一个进程可以有多个线程。线程是独立运行的,可以同时执行多个任务。Java线程是通过Thread类来创建和管理的。 并行是指两个或多个任务在同一时刻同时执行,需要多个执行单元。在Java中,可以通过多线程来实现并行执行。 并发是指两个或多个任务在同一时间段内交替执行,需要一个执行单元。在Java中,可以通过线程的调度来实现并发执行。 wait是Object类中的一个方法,用于使线程进入等待状态,直到其他线程调用notify或notifyAll方法唤醒它。 sleep是Thread类中的一个方法,用于使线程进入休眠状态,暂停执行一段时间。 以下是一个简单的示例代码,展示了如何创建线程并实现并行执行:
javaCopy codepublic class ParallelExecutionExample {
public static void main(String[] args) {
Thread thread1 = new Thread(new Task("Task 1"));
Thread thread2 = new Thread(new Task("Task 2"));
thread1.start();
thread2.start();
}
}
class Task implements Runnable {
private String name;
public Task(String name) {
this.name = name;
}
public void run() {
System.out.println("Executing " + name);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + " finished");
}
}
以上代码创建了两个线程,分别执行名为"Task 1"和"Task 2"的任务。在任务执行的过程中,通过sleep方法使线程休眠一秒钟,模拟任务的耗时操作。最终输出每个任务的执行结果。由于使用了多线程,所以两个任务可以并行执行,互不影响。
wait方法和sleep方法的区别在于:
- wait方法属于Object类,是用于线程之间的协作的,调用wait方法会使当前线程进入等待状态,并释放对象的锁,直到其他线程调用notify或notifyAll方法来唤醒它。wait方法必须在synchronized块或方法中调用。
- sleep方法属于Thread类,是用于线程的休眠的,调用sleep方法会使当前线程进入休眠状态,不会释放对象的锁。sleep方法可以在任何地方使用。 以下是修改后的示例代码,展示了如何使用wait和sleep方法:
javaCopy codepublic class ParallelExecutionExample {
public static void main(String[] args) {
Task task = new Task();
Thread thread1 = new Thread(() -> {
synchronized (task) {
try {
System.out.println("Executing Task 1");
task.wait(); // 线程1进入等待状态
System.out.println("Task 1 resumed");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (task) {
System.out.println("Executing Task 2");
try {
Thread.sleep(1000); // 线程2休眠1秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
task.notify(); // 唤醒等待的线程1
System.out.println("Task 2 finished");
}
});
thread1.start();
thread2.start();
}
static class Task {
}
}
在这个示例中,线程1先执行,进入synchronized块后调用wait方法,进入等待状态。然后线程2执行,进入synchronized块后调用sleep方法,使线程休眠1秒钟。1秒钟后,线程2调用notify方法唤醒等待中的线程1,并输出相应的信息。最终输出结果为:
plaintextCopy codeExecuting Task 1
Executing Task 2
Task 2 finished
Task 1 resumed
这个示例展示了wait和sleep的不同用途和效果。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
皮牙子抓饭2023/08/11 03:03:151楼编辑删除举报