活动介绍

java多线程

preview
3星 · 超过75%的资源 需积分: 0 1 下载量 91 浏览量 更新于2014-10-18 收藏 225KB DOC 举报
【Java多线程】是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,从而提高程序的效率和响应性。以下是一些关于Java多线程的重要知识点: 1. **多线程编程**:多线程编程是在单个应用程序中同时执行多个任务的能力。这种技术常用于GUI(图形用户界面)应用,确保用户界面保持响应,即使后台有耗时的操作正在进行。例如,一个新线程可能用于处理数据加载,而主线程则继续处理用户交互。 2. **wait(), notify(), notifyAll()**:这些方法存在于`Object`类中,因为所有Java类都默认继承`Object`,这样就使得所有类都能直接使用这些方法进行同步控制。`wait()`让当前线程进入等待状态,释放对象锁,直到其他线程调用`notify()`或`notifyAll()`唤醒它;`notify()`唤醒一个正在等待该对象的线程;`notifyAll()`则唤醒所有等待的线程。 3. **wait() vs sleep()**:`wait()`和`sleep()`的主要区别在于线程的状态。`sleep()`使线程暂时停止执行,但线程仍然保留对对象锁的占有,且在指定时间后自动恢复;而`wait()`则会让线程完全释放对象锁,并进入等待池,必须由其他线程调用`notify()`或`notifyAll()`才能唤醒。 4. **Thread vs Runnable**:`Thread`类代表一个线程,可以直接启动执行;而`Runnable`接口定义了可以被`Thread`执行的逻辑。实现`Runnable`的类可以与其他类一起继承,因为Java支持单一继承。这意味着,如果一个类已经继承了其他类,它还可以通过实现`Runnable`接口来实现多线程。 5. **重载start()方法**:虽然可以重载`start()`方法,但是必须确保依然调用`super.run()`或重写`run()`方法,否则线程的行为可能会不符合预期。 6. **代码解析**: - 对于问题9的代码,由于没有调用`start()`方法而是调用了`run()`,所以代码会直接执行`run()`方法中的内容,即打印0到9,因此选项C正确。 - 对于问题10的代码,可以编译并且运行,输出“waiting”,然后抛出`IllegalMonitorStateException`,因为`wait()`、`notify()`和`notifyAll()`必须在同步块或方法中调用,而这里的调用不在同步上下文中,所以选项D正确。 - 对于问题11的代码,这是一个典型的线程示例,`DSRoss`类继承自`Thread`并重写了`run()`方法。然而,由于`notwait()`方法中的`wait()`和`notifyAll()`的使用没有在同步块中,这将导致编译错误,因此选项A正确。 理解这些基本概念对于编写高效的并发Java程序至关重要。在实际开发中,还需要掌握更多的多线程特性,如线程安全、死锁、同步机制(synchronized关键字、Lock接口)、线程池(ExecutorService)以及并发工具类(如Semaphore、CountDownLatch等),这些都是构建高并发系统的基础。
身份认证 购VIP最低享 7 折!
30元优惠券
阿PENGPENGPENG
  • 粉丝: 0
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜