Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
有两种方法实现一个线程,分别是:扩展 Thread 类和实现 Runnable 接口;
用 synchronized 修饰同步;
stop() 会释放所有线程获得的锁定;
suspend() 会有死锁倾向,调用该方法目标线程会停下来,但仍然持有该对象的锁定,在目标线程重新开始之前,其他线程试图持有该对象锁时就会造成死锁现象。
sleep() 与 wait() 有什么区别?
sleep() 使线程暂停执行一段时间的方法。在 sleep() 时间到达后,线程不一定会立即恢复执行,而是公平地竞争资源,sleep() 不会放弃监视器的所属权。
wait() 发布对象的所有权,并等待,直到此对象调用 notify() 或 notifyAll() 或时间片到达,然后该线程将等到重新获得
对监视器的所有权后才能继续执行。
Java所有的类都具有线程的潜力,Java赋予的每个对象一个锁,在计算机内部工作在同一时间,只有一个对象可以持有锁,也就是说程序在同一时间只有一个程序可以运行,这里我把对象比作是一个小的程序。而多处理器,那么就另当别论了。
在这里我们首先学习一下公共方法wait,notify,notifyAll。
wait方法可以使在当前线程的对象等待,直到别的线程调用此对象的notify或notifyAll方法(注意:调用的是此对象的notify和notifyAll),并且当前运行的线程必须具有此对象的对象监视器,对象监视器我们可以从三个方法中获得,如下:
1.在执行对象实例同步方法体中,可以获得此对象的对象监视器,例子伪代码如下:
synchronized void aMethod(){
while(condition)
this.wait();
//other mothed;
}
2.通过执行对象同步synchronized正文,例子伪代码如下:
synchronized(this){
while(condition)
this.wait();
//other mothed;
}
3.对于 Class 类型的对象,可以通过执行该类的同步静态方法
这个方法可以使当前对象满足条件condition后,执行等待,当前线程对象放弃锁,cpu记录当前线程状态,以备下次回复。然后让其他线程运行,直到其他线程调用此对象的notify或notifyAll方法,此对象才会重新获得此对象的对象监视器,此对象才能重新运行。
注意:调用这个方法,必须具有对象监视器,也就是说我们必须在这三种方法选一种来获得对象监视器,如果调用此方法wait,却没用对象监视器,那么运行时会抛出IllegalMonitorStateException.
而且,在静态方法中也无法获得对象监视器,只能在Class类型的对象中,我们才可以通过调用该类的同步静态方法来获得对象监视器。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/snipps/archive/2010/03/19/5396082.aspx
分享到:
相关推荐
#### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 } } new MyThread().start(); ...
总之,Java线程是并发编程的基础,理解和掌握线程的生命周期、实现方式和同步机制对于编写高效、安全的多线程程序至关重要。在实际应用中,根据需求选择合适的线程实现策略,并结合同步机制,可以有效地利用系统资源...
### Java线程基础 在Java语言中,线程是程序执行流的基本单元。一个标准的Java应用程序至少会有一个线程,即主线程,用于执行程序的主要逻辑。通过创建多个线程,可以实现并发执行任务,提高程序的运行效率和响应...
本教程不仅提供了对Java线程基础概念的全面介绍,还深入探讨了如何有效地利用线程来解决实际问题。通过学习这些知识点,开发者可以更好地理解和应用多线程编程技巧,从而编写出高性能、高可靠性的Java应用程序。
通过深入学习和实践这些Java线程基础知识,你可以有效地编写出高效、安全的多线程程序。记住,理解线程的原理和掌握同步机制是关键,这将有助于解决复杂的并发问题。阅读"Java线程.pdf"文档,你将获得更详细、全面的...
Java线程是并发编程的重要组成部分,它允许程序中有多个执行流同时运行,提高了程序的效率和响应性。...理解线程的基本概念和创建方式是Java并发编程的基础,掌握好这些知识对于开发高效、稳定的多线程应用至关重要。
这本书详细介绍了Java线程的各个方面,包括基础知识、高级特性以及实战应用。 在Java中,线程是通过`Thread`类或实现`Runnable`接口来创建的。基础知识点包括如何启动线程、线程的状态(新建、就绪、运行、阻塞和...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...
Java线程是Java编程中的重要概念,特别是在多核处理器和并发处理中不可或缺。Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了...
Java线程的深入理解和熟练掌握是Java程序员必备的技能,它涉及到程序的性能优化、并发控制和安全性,是开发复杂多线程应用的基础。在实际开发中,合理使用线程同步机制和理解线程调度原理,可以有效避免死锁、活锁等...
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
在面试中,了解并掌握多线程的基本概念和技术是至关重要的。以下是一些关于Java多线程的关键知识点: 1. **线程同步**:Java中,线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。主要机制有...
这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...
Java线程是Java编程语言中...以上知识点覆盖了Java线程的基础概念、创建方式、状态管理、同步机制以及高级特性,是Java程序员必须掌握的重要内容。通过深入理解和熟练应用这些知识,可以编写出高效、安全的多线程程序。
这些知识点覆盖了Java线程编程的基础到高级应用,对于Java开发者来说,理解和掌握这些内容对于编写高效、安全的并发程序至关重要。通过深入学习和实践,开发者能够更好地应对多线程环境下的挑战。
线程在Java编程中扮演着至关重要的...总之,本课程将引导你逐步深入Java线程的世界,从基础概念到高级技巧,帮助你构建强大的多线程编程能力。通过学习,你将能更好地应对并发编程中的挑战,提升代码的效率和稳定性。
首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,或者实现Runnable接口并提供run()方法。在run()方法中编写...
#### 二、线程的基本概念 - **进程与线程**:进程是指在计算机中运行的一个执行单元,而线程则是进程内的一个执行单元。每个进程至少有一个线程,即主线程。 - **Java程序中的线程**:当Java程序启动时,虚拟机会...