- 浏览: 154017 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lyaqys:
lz实现的OptimisticExclusiveLock有点问 ...
java park/unpark 【java并发】基于JUC CAS原理,自己实现简单独占锁
很多书都说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");
}
}
}
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 栈内存解惑
2013-10-23 23:41 676int j = 0; j = j++; ... -
毗连“"aa"”和“"bb"”不能给出一个有效的预处理标识符,gcc编译错误表
2013-10-01 18:54 3002gcc bug : ##’ cannot appear at ... -
探索 Pexpect,第 2 部分:Pexpect 的实例分析
2013-08-19 11:08 1721原文: http://www.ibm.com/develope ... -
shell 文件处理
2013-08-16 15:21 731linux文件合并去重 cat loginpc.txt | ... -
进程监控
2013-08-12 15:40 678*/10 * * * * sh /opt/fetch/mint ... -
建议编译的时候加警告 atof
2013-08-07 20:46 712#include <stdlib.h> ... -
监控脚本的配置
2013-08-05 19:51 62910 9,12,18 * * * /usr/local/bin ... -
feodra 17 安装 chrome
2013-08-04 01:35 7691: 下载:http://www.google.cn/chro ... -
Sudo提权出现:xx用户不在 sudoers 文件中
2013-08-03 20:22 913Sudo提权出现:xx用户不在 sudoers 文件中 症状 ... -
select,epoll,poll比较
2013-07-28 17:13 688select,poll,epoll简介 se ... -
根据nestat 的端口,查看访问的程序
2013-07-19 12:15 978[@zw-76-82 ~]# lsof -i tcp:3398 ... -
Google Guava Collections 使用介绍
2013-07-16 18:10 713Google Guava Collections 使用介绍 J ... -
Google Collections(Guava)中强大的Concurrent MapMaker
2013-07-16 18:07 1363仔细研究了刚发布1.0版本的Google Collection ... -
vim7.3 编辑中文字符的文件会显示乱码
2013-06-29 03:16 834默认编译安装vim7.3后打开含有中文字符的文件会显示乱码,g ... -
vim 退格键(backspace)不能用
2013-06-29 01:59 1681两个步骤: 1.去掉讨厌的有关vi一致性模式,避免以前版本的 ... -
ubuntu pdf乱码解决办法
2013-06-29 01:51 645ubuntu pdf乱码解决办法 第一步,在线安装中文语言支持 ... -
java wait 研究
2013-06-28 17:07 780[color=red]java wait 的使用必须放在实例对 ... -
java钩子函数的使用已经kill
2013-06-27 22:31 1557package com.aircoder.test; imp ... -
java获取所有的线程信息
2013-06-24 20:02 1604public class T2 { public sta ... -
java 获取mysql datetime 时间注意
2013-05-16 14:43 1522class SPubinfo implements RowMa ...
相关推荐
6. **多线程**:理解线程的创建和同步机制,如synchronized关键字和wait/notify机制。 7. **JDBC**:掌握数据库连接、查询、增删改查操作,理解预编译的PreparedStatement和事务处理。 8. **Swing或JavaFX**:基础的...
### Java基础知识点汇总 #### 一、JAVA反射机制的作用及应用 **作用:** 1. **动态获取类信息:** 反射可以让程序在运行时动态地获取类的信息,包括...理解并掌握这些知识点对于成为一名优秀的Java开发者至关重要。
### Java多线程技术详解及面试要点 #### 一、多线程基础概念 **1.... - **进程**: 是操作系统进行资源分配和调度...通过以上内容的学习和理解,你可以更好地掌握Java多线程的核心知识点,为Java工程师面试做好充分准备。
线程Dump日志提供了详细的线程状态和调用栈信息,这对于理解和解决线程阻塞、死锁等问题至关重要。如果堆栈信息显示应用代码,通常意味着线程正在等待资源,可能是由于资源锁定或等待其他线程完成特定操作。 【正文...
Java开发工程师面试题涉及到多个核心领域,包括数据库优化、SQL查询优化、事务管理、数据类型、性能评估...以上内容详尽阐述了Java开发工程师面试中常见的关键知识点,这些知识点对于理解和处理日常开发工作至关重要。
### 单例模式的线程...这些知识点涵盖了单例模式、线程安全的阻塞队列、生产者-消费者模型、线程池、带超时功能的缓存、信号量、分布式锁以及异步任务处理等多个方面,对于理解和掌握Java多线程编程具有重要的意义。
根据给定文件的信息,我们...通过以上知识点的学习,开发者可以深入理解Java多线程编程的核心概念和技术细节,为实际开发工作打下坚实的基础。同时,掌握这些高级并发技术对于构建高性能、高可靠性的应用系统至关重要。
本文旨在帮助Java多线程开发人员深入理解并发的核心概念及其应用。 #### 二、概念 以下是一些在Java并发编程中常见的概念: 1. **Java内存模型 (Java Memory Model)**: - **定义**:Java SE 5 (JSR133) 中定义...
### Java并发编程面试题知识点详解 ...以上内容涵盖了Java并发编程面试中常见的知识点,理解这些概念对于掌握并发编程的基础和高级特性至关重要。通过深入学习和实践,可以更好地应对实际开发中遇到的各种并发问题。
**题目:** Java中`wait()`与`sleep()`的区别? **解答:** 主要有以下几个区别: 1. **锁的释放**: `wait()`会释放锁,而`sleep()`不会释放锁。 2. **所属对象**: `wait()`是`Object`类的方法,`sleep()`是`Thread`...
Java多线程是Java编程中的核心...Java多线程技术在开发高并发系统时至关重要,理解和掌握这些知识点有助于编写高效、稳定的并发程序。同时,要时刻注意线程安全问题,避免数据竞争和死锁,以保证程序的正确性和性能。
- **更清晰的代码**:Lock接口的显式锁定和解锁使得代码更加清晰和易于理解。 #### 3. wait与sleep方法的区别 - **原理不同**:`sleep()`是Thread类的静态方法,用于让线程暂停指定的时间;`wait()`是Object类的...
- **题目**: 在Java中`wait`和`sleep`方法的不同? - **解析**: `wait`方法会释放对象的锁,使线程进入等待状态直到被唤醒;而`sleep`方法会让线程休眠一段时间,期间线程仍然持有锁。`wait`通常用于线程之间的协调...
### 全方位Java学习笔记知识点总结 #### JSP内置对象详解 ##### 1....- **定义**:`page`对象是当前JSP页面本身的引用,...对于初学者来说,深入理解这些概念是非常重要的,这有助于更好地掌握Java Web开发的核心技能。
3. **WAITING状态**:线程调用`wait()`、`join()`或`LockSupport.park()`方法时,会进入WAITING状态,等待其他线程的通知或解锁。 4. **join()和daemon线程**:`join()`使当前线程等待指定线程结束后再继续执行;...
2. **原子操作类**:`java.util.concurrent.atomic` 包提供了一系列原子类,例如 `AtomicInteger`,它们支持无锁编程,即无需显式地加锁解锁就能执行原子操作,从而提高并发性能。 3. **更灵活的锁机制**:`java....
- **Java线程状态机图**:根据Java线程的生命周期,包括新建(new)、可运行(runnable)、运行(running)、阻塞(block)和死亡(dead)这五个状态,用Rose绘制状态机图,并理解各种状态间的转换条件。 **线程状态详解**: ...
不推荐使用`stop()`和`suspend()`方法,因为它们可能导致不安全的状态(例如资源解锁)和死锁。推荐使用`wait()`和`notify()`来控制线程协作。 3. **Java流类型**: Java的流分为字节流(Byte Stream)和字符流...
通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...
理解并熟练掌握这些多线程和并发的知识点对于Java开发者来说至关重要,特别是在设计高并发系统或处理线程安全问题时。在面试中能够深入讲解这些问题,不仅展示了扎实的理论基础,还能体现出实际解决问题的能力。