java线程同步方法,方法块差别
先说同步方法。它究竟是锁定的当前对象,还是当前类
代码块1
package com.ssss;
public class Thread1 implements Runnable {
//public static Object o=new Object();
public void run() {
pt();
}
public synchronized void pt(){
int a=0;
//synchronized(o) {
for (int i = 0; i < 5; i++) {
a++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i + "++++" + a);
}
//}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread1 t2 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t2, "B");
ta.start();
tb.start();
}
}
打印出来的结果为
由此可见是当前对象,而A和B是两个不同的对象。所以打印序列就是混乱的
代码块2
看同步块
package com.ssss;
public class Thread1 implements Runnable {
public static Object o=new Object();
public void run() {
pt();
}
public void pt(){
int a=0;
synchronized(o) {
for (int i = 0; i < 5; i++) {
a++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i + "++++" + a);
}
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread1 t2 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t2, "B");
ta.start();
tb.start();
}
}
看打印序列
说明同步块能够锁定不论什么对象
就是说同步方法是锁定当前对象,同步方法块是能够锁定不论什么对象
java线程同步方法,方法块差别的更多相关文章
- Java线程通讯方法之wait()、nofity() 详解
Java线程通讯方法之wait().nofity() 详解 本文将探讨以下问题: synchronized 代码块使用 notify()与notifyAll()的区别 Java wait(),noti ...
- java线程join方法使用方法简介
本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的 如图所示代码,是并行执行的 public class ThreadTest { ...
- Java线程阻塞方法sleep()和wait()精炼详解
版权声明:因为个人水平有限,文章中可能会出现错误,如果你觉得有描述不当.代码错误等内容或者有更好的实现方式,欢迎在评论区告诉我,即刻回复!最后,欢迎关注博主!谢谢 https://blog.csdn. ...
- java 线程同步方法执行与唤醒实例
账号提钱.存钱实例方法 public class Account { private int balance; private int maxBalance; public Account(int b ...
- java线程分析方法
1.查出占用资源大的线程的PID:xxxx ps -aux 2.安装java的sdk(含java虚拟机) jstack 试试是否安装成功 3.生成堆栈 jstack -l xxxx >> ...
- java线程基础方法详解
一.线程状态转换 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行 ...
- [java] java 线程join方法详解
join方法的作用是使所属线程对象正常执行run方法,而对当前线程无限期阻塞,直到所属线程销毁后再执行当前线程的逻辑. 一.先看普通的无join方法NoJoin.java public class N ...
- java线程异常处理方法
工作中常发现有些程序发生异常但却没有错误日志,原因就是一些开发线程异常处理错误,导致程序报错但异常信息打印到堆栈上,不好在生产环境中定位问题. 在java多线程程序中,所有线程都不允许抛出未捕获的ch ...
- Java线程入门第二篇
Java线程通信方法 0.(why)每个线程都有自己的栈空间,我们要线程之间进行交流,合作共赢. 1.synchronized和volatile关键字 a) 看下面的synchronized关键字 ...
随机推荐
- /dev/fb0入门练习
转:http://hi.baidu.com/fsx92/item/bdbf90d8adab409f260ae738 大家都知道Unix/Linux系统是由命令驱动的.那么最基本的系统是命令行的(就是想 ...
- CentOS6.5配置网络
[ CleverCode发表在csdn博客中的原创作品,请勿转载.原创地址:http://blog.csdn.net/clevercode/article/details/46376985] 1 网卡 ...
- gpu和cpu区别
GPU的功耗远远超过CPUCache, local memory: CPU > GPU Threads(线程数): GPU > CPURegisters: GPU > CPU 多寄存 ...
- Python学习(四)数据结构 —— bool
Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...
- Android模拟器怎么配置网络连通
PC机可以上网,PC机上面的android模拟器不能上网.其实只要使模拟器跟自己的PC在同一个网段内就行了: 首先,如果没有配置sdk的环境变量的,那么在CMD命令下进入sdk安装路径的platfor ...
- 通过nc构造telnet后门
nc被称为网络中的“瑞士军刀”,其功能强大,如果在肉鸡上运行“nc.exe –p port –L –d –e cmd.exe”命令就可以构建一个telnet后门,即使关闭了nc.exe程序运行窗口,该 ...
- Orchard运用 - 学习资源分享
这段时间研究Orchard,看到一些资源十分有用. 比如国内还是有些牛人在分享心得,在此也广播一下给新手: JustRun对Orchard的一些代码分析 Orchard源码分析 Orchard中文社区 ...
- hadoop中的序列化与Writable接口
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-writable-interface.html,转载请注明源地址. 简介 序列化和反序列化就是结构化对象 ...
- React 同构思想
作者:yangchunwen React比较吸引我的地方在于其客户端-服务端同构特性,服务端-客户端可复用组件,本文来简单介绍下这一架构思想. 出于篇幅原因,本文不会介绍React基础,所以,如果你还 ...
- (转)Behavior Tree实践
http://www.cnblogs.com/mavaL/archive/2013/04/07/3001860.html