Java多线程:线程同步——实验3
来源:互联网 发布:苹果mac壁纸系统自带 编辑:程序博客网 时间:2024/05/16 06:25
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554
/** * @Description: 两个线程(线程1与线程2)访问同一个对象的内同步方法syn1()与同步方法syn2() * 结果: 线程1访问对象sameObj的同步方法syn1()时, 线程2访问对象sameObj中的同步方法syn2()阻塞. 或者线程2访问时, 线程1阻塞. * 结论: 通常知道不同线程访问同一个对象的相同同步方法时, 线程间是互斥的. * 实际上, 不同线程访问同一个对象的不同同步方法时, 线程间也是互斥的. * 将同步方法换成同步块结论也是成立的. 关键的因素在于: 一个对象就一把锁. * @author snoopy * @blog http://blog.csdn.net/huang_xw */package basic.b_syn;import org.apache.log4j.Logger;public class TestSynC {private static Logger logger = Logger.getLogger(TestSynC.class);// 线程1static class T1 implements Runnable {TestSynC s;public T1(TestSynC sameObj) {this.s = sameObj;}// 线程1访问同步方法1public void run() {logger.debug("启动线程1...........");s.syn1();logger.debug("退出线程1...........");}}// 线程2static class T2 implements Runnable {TestSynC s;public T2(TestSynC sameObj) {this.s = sameObj;}// 线程2访问同步方法2public void run() {logger.debug("启动线程2...........");s.Syn2();logger.debug("退出线程2...........");}}// 对象的同步方法1public synchronized void syn1() {logger.debug("▲▲▲▲▲▲线程1开始访问同步方法1");try {logger.debug("线程1正在访问同步方法1!!!");Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}logger.debug("▲▲▲▲▲▲线程1退出同步方法1");}// 对象的同步方法2public synchronized void Syn2() {logger.debug("●●●●●●线程2开始访问同步方法2");for (int i = 0; i < 5; i++) {try {logger.debug("线程2正在访问同步方法2!!!");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}logger.debug("●●●●●●线程2退出同步方法2");}public static void main(String[] args) {// 这是多线程要访问的同一个对象TestSynC sameObj = new TestSynC();// 线程1访问同步方法1, 线程2同样也访问同步方法2.Thread t1 = new Thread(new T1(sameObj));Thread t2 = new Thread(new T2(sameObj));t1.start();t2.start();}}执行结果:
0 [Thread-0] DEBUG basic.b_syn.TestSynC - 启动线程1...........1 [Thread-0] DEBUG basic.b_syn.TestSynC - ▲▲▲▲▲▲线程1开始访问同步方法11 [Thread-0] DEBUG basic.b_syn.TestSynC - 线程1正在访问同步方法1!!!1 [Thread-1] DEBUG basic.b_syn.TestSynC - 启动线程2...........3001 [Thread-0] DEBUG basic.b_syn.TestSynC - ▲▲▲▲▲▲线程1退出同步方法13001 [Thread-0] DEBUG basic.b_syn.TestSynC - 退出线程1...........3001 [Thread-1] DEBUG basic.b_syn.TestSynC - ●●●●●●线程2开始访问同步方法23001 [Thread-1] DEBUG basic.b_syn.TestSynC - 线程2正在访问同步方法2!!!4001 [Thread-1] DEBUG basic.b_syn.TestSynC - 线程2正在访问同步方法2!!!5001 [Thread-1] DEBUG basic.b_syn.TestSynC - 线程2正在访问同步方法2!!!6002 [Thread-1] DEBUG basic.b_syn.TestSynC - 线程2正在访问同步方法2!!!7002 [Thread-1] DEBUG basic.b_syn.TestSynC - 线程2正在访问同步方法2!!!8006 [Thread-1] DEBUG basic.b_syn.TestSynC - ●●●●●●线程2退出同步方法28007 [Thread-1] DEBUG basic.b_syn.TestSynC - 退出线程2...........
- Java多线程:线程同步——实验3
- Java多线程:线程同步——实验1
- Java多线程:线程同步——实验2
- Java多线程:线程同步——实验4
- Java多线程:线程同步——实验5
- java多线程——线程同步问题
- Java多线程——线程同步
- Java多线程——线程同步(2)
- Java多线程编程— 线程同步问题
- java多线程-线程同步
- java多线程-线程同步
- JAVA多线程:线程同步
- Java多线程-线程同步
- Java多线程-线程同步
- 多线程——线程同步
- Java多线程开发五——线程的同步
- Java多线程(五)——线程同步
- Java多线程——线程同步与锁
- Java多线程:线程同步——实验2
- 单点登录
- Apache日志格式
- 浅析嵌入式程序设计中的优化问题
- html中id和name的区别
- Java多线程:线程同步——实验3
- Winform中combobox绑定数据源后,怎么获取combobox选中行对应数据源中的其他字段值
- 黑马程序员-static和final关键字
- BI Concept and Fundamental
- 第一支app上架後學到的經驗
- VLC 命令行控制参数--转载
- 关于jsp和servlet中实现页面跳转的几种方式总结
- Google Protocol Buffers
- Java多线程:线程同步——实验4