JAVA线程编程:继承Thread与实现Runnable示例

需积分: 4 1 下载量 187 浏览量 更新于2024-09-16 收藏 58KB DOC 举报
“JAVA复习资料,整体复习资料,很全面的哦” 这篇复习资料主要涵盖了Java编程语言中的核心概念,特别是线程的使用。线程是Java多任务处理的基础,允许程序同时执行多个独立的代码段。以下是根据提供的部分内容展开的详细知识点: 1. **线程的创建方式**: - **通过继承Thread类**:如示例中的`People`类,它继承自`Thread`类,并重写了`run()`方法。当创建`People`对象并调用`start()`方法时,就会启动一个新的线程并执行`run()`方法内的代码。示例中展示了两个线程共享`StringBuffer str`的情况,导致它们之间的操作可能会交错。 - **通过实现Runnable接口**:`Bank`类实现了`Runnable`接口,实现了`run()`方法。这种方式更常见,因为Java不支持多重继承,而可以实现多个接口。`Bank`类的`run()`方法定义了线程的具体行为。在示例中,两个线程分别增加和减少`number`变量,体现了线程间的同步问题。 2. **线程控制**: - `sleep()`方法:在`People`类的`run()`方法中,使用`sleep(200)`使线程暂停200毫秒,以控制线程执行的节奏,避免一个线程独占CPU资源。 3. **线程同步**: - 示例中没有显式地使用同步机制,但在实际应用中,如`Bank`类的`run()`方法,如果两个线程同时修改`number`变量,可能引发数据不一致的问题。Java提供了`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`等方法来解决线程同步问题,防止并发访问共享资源时出现竞态条件。 4. **线程安全**: - `StringBuffer`类在多线程环境中比`String`更安全,因为它提供了线程安全的字符串操作。在示例中,`People`类中的`str.append()`方法是线程安全的,不会导致数据混乱。 5. **线程状态**: - 示例中的`Bank`类展示了线程的“死亡”状态,即线程运行完毕或因异常退出。当`number`满足特定条件时,线程会打印“进入死亡状态”并退出循环。 6. **线程命名**: - `setName()`和`getName()`方法用于设置和获取线程的名称,方便调试和理解代码的执行流程。 7. **生命周期**: - 一个线程的生命周期包括新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)六个阶段。示例中通过`start()`方法使线程进入可运行状态,然后自动进入运行状态。 8. **线程优先级**: - Java的`Thread`类有10个优先级,`Thread.NORM_PRIORITY`是默认优先级,可以通过`setPriority()`方法调整。不过,线程调度很大程度上取决于操作系统,优先级不一定保证线程的执行顺序。 这些知识点构成了Java线程编程的基础,对于理解和编写多线程Java应用程序至关重要。在实际编程中,还需要考虑更多的并发控制策略,如使用`ReentrantLock`、`Semaphore`等高级工具,以及线程池的管理等。