`

java wait的解锁理解********

阅读更多
很多书都说wait会释放线程加的锁,其实经过试验不是这样的,
wait只是释放本对象的this锁

public class TestWait {
public static final Object a=new Object();
public static final Object b=new Object();
public static Runnable r = null;
public static void main(String[] args) throws InterruptedException {
       r = new A();
new Thread(r).start();//a =1//a的值是一样的
// new Thread(r).start();// a=1
Thread.sleep(10);
Runnable rr = new B();
new Thread(rr).start();// 必须等待
}


}

class A implements Runnable{

int a = 0;
@Override
public void run() {
    a=+1;
System.out.println("A"+a);
synchronized (this) {//

synchronized (TestWait.a) {
try {
wait(10000);//仅仅是释放this锁,即对本对象的枷锁
System.out.println("....");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

}
class B implements Runnable{

@Override
public void run() {
System.out.println("b....");
synchronized (TestWait.r) {// 假如是 TestWait.r , 则需要等待wait(10000); 结束
System.out.println("b");
}

}

}
分享到:
评论

相关推荐

    二级java模拟软件

    6. **多线程**:理解线程的创建和同步机制,如synchronized关键字和wait/notify机制。 7. **JDBC**:掌握数据库连接、查询、增删改查操作,理解预编译的PreparedStatement和事务处理。 8. **Swing或JavaFX**:基础的...

    Java基础知识点汇总

    ### Java基础知识点汇总 #### 一、JAVA反射机制的作用及应用 **作用:** 1. **动态获取类信息:** 反射可以让程序在运行时动态地获取类的信息,包括...理解并掌握这些知识点对于成为一名优秀的Java开发者至关重要。

    2019年蚂蚁课堂-余胜军主编Java工程师面试宝典-V1.0

    ### Java多线程技术详解及面试要点 #### 一、多线程基础概念 **1.... - **进程**: 是操作系统进行资源分配和调度...通过以上内容的学习和理解,你可以更好地掌握Java多线程的核心知识点,为Java工程师面试做好充分准备。

    jstack生成的Thread Dump日志1

    线程Dump日志提供了详细的线程状态和调用栈信息,这对于理解和解决线程阻塞、死锁等问题至关重要。如果堆栈信息显示应用代码,通常意味着线程正在等待资源,可能是由于资源锁定或等待其他线程完成特定操作。 【正文...

    Java开发工程师面试题资料

    Java开发工程师面试题涉及到多个核心领域,包括数据库优化、SQL查询优化、事务管理、数据类型、性能评估...以上内容详尽阐述了Java开发工程师面试中常见的关键知识点,这些知识点对于理解和处理日常开发工作至关重要。

    米哈游笔试题目-Java方向.docx

    ### 单例模式的线程...这些知识点涵盖了单例模式、线程安全的阻塞队列、生产者-消费者模型、线程池、带超时功能的缓存、信号量、分布式锁以及异步任务处理等多个方面,对于理解和掌握Java多线程编程具有重要的意义。

    黑马程序员_张孝祥_Java多线程与并发库 视频+代码+资料

    根据给定文件的信息,我们...通过以上知识点的学习,开发者可以深入理解Java多线程编程的核心概念和技术细节,为实际开发工作打下坚实的基础。同时,掌握这些高级并发技术对于构建高性能、高可靠性的应用系统至关重要。

    java并发核心编程

    本文旨在帮助Java多线程开发人员深入理解并发的核心概念及其应用。 #### 二、概念 以下是一些在Java并发编程中常见的概念: 1. **Java内存模型 (Java Memory Model)**: - **定义**:Java SE 5 (JSR133) 中定义...

    Java并发编程面试题(2024最新版)-重点.docx

    ### Java并发编程面试题知识点详解 ...以上内容涵盖了Java并发编程面试中常见的知识点,理解这些概念对于掌握并发编程的基础和高级特性至关重要。通过深入学习和实践,可以更好地应对实际开发中遇到的各种并发问题。

    15个顶级Java多线程面试题及回答.docx

    **题目:** Java中`wait()`与`sleep()`的区别? **解答:** 主要有以下几个区别: 1. **锁的释放**: `wait()`会释放锁,而`sleep()`不会释放锁。 2. **所属对象**: `wait()`是`Object`类的方法,`sleep()`是`Thread`...

    JAVA多线程学习笔记整理(csdn)————程序.pdf

    Java多线程是Java编程中的核心...Java多线程技术在开发高并发系统时至关重要,理解和掌握这些知识点有助于编写高效、稳定的并发程序。同时,要时刻注意线程安全问题,避免数据竞争和死锁,以保证程序的正确性和性能。

    Java多线程问题

    - **更清晰的代码**:Lock接口的显式锁定和解锁使得代码更加清晰和易于理解。 #### 3. wait与sleep方法的区别 - **原理不同**:`sleep()`是Thread类的静态方法,用于让线程暂停指定的时间;`wait()`是Object类的...

    15个顶级Java多线程面试题及回答

    - **题目**: 在Java中`wait`和`sleep`方法的不同? - **解析**: `wait`方法会释放对象的锁,使线程进入等待状态直到被唤醒;而`sleep`方法会让线程休眠一段时间,期间线程仍然持有锁。`wait`通常用于线程之间的协调...

    全方位java学习笔记

    ### 全方位Java学习笔记知识点总结 #### JSP内置对象详解 ##### 1....- **定义**:`page`对象是当前JSP页面本身的引用,...对于初学者来说,深入理解这些概念是非常重要的,这有助于更好地掌握Java Web开发的核心技能。

    2022面试题5java背诵版本.doc

    3. **WAITING状态**:线程调用`wait()`、`join()`或`LockSupport.park()`方法时,会进入WAITING状态,等待其他线程的通知或解锁。 4. **join()和daemon线程**:`join()`使当前线程等待指定线程结束后再继续执行;...

    Java 5.0多线程编程

    2. **原子操作类**:`java.util.concurrent.atomic` 包提供了一系列原子类,例如 `AtomicInteger`,它们支持无锁编程,即无需显式地加锁解锁就能执行原子操作,从而提高并发性能。 3. **更灵活的锁机制**:`java....

    实验四:面向对象的系统建模B1

    - **Java线程状态机图**:根据Java线程的生命周期,包括新建(new)、可运行(runnable)、运行(running)、阻塞(block)和死亡(dead)这五个状态,用Rose绘制状态机图,并理解各种状态间的转换条件。 **线程状态详解**: ...

    J2ee面试题目<顶起来啊>

    不推荐使用`stop()`和`suspend()`方法,因为它们可能导致不安全的状态(例如资源解锁)和死锁。推荐使用`wait()`和`notify()`来控制线程协作。 3. **Java流类型**: Java的流分为字节流(Byte Stream)和字符流...

    java多线程经典案例

    通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...

    JAVA面试_多线程,高并发相关14个问题.pdf

    理解并熟练掌握这些多线程和并发的知识点对于Java开发者来说至关重要,特别是在设计高并发系统或处理线程安全问题时。在面试中能够深入讲解这些问题,不仅展示了扎实的理论基础,还能体现出实际解决问题的能力。

Global site tag (gtag.js) - Google Analytics