Java多线程:线程同步——实验1
来源:互联网 发布:最新一手收藏品数据 编辑:程序博客网 时间:2024/06/05 09:46
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554
/** * @Description: 两个线程(线程1与线程2)访问同一个对象的内同步方法syn()与非同步方法nonsyn() * 结果: 线程1访问对象sameObj的同步方法时, 线程2可以同时访问对象sameObj的非同步方法. * @author snoopy * @blog http://blog.csdn.net/huang_xw */package basic.b_syn;import org.apache.log4j.Logger;public class TestSynA {private static Logger logger = Logger.getLogger(TestSynA.class);// 线程1static class T1 implements Runnable {TestSynA s;public T1(TestSynA sameObj) {this.s = sameObj;}// 线程1访问同步方法public void run() {logger.debug("启动线程1...........");s.syn();logger.debug("退出线程1...........");}}// 线程2static class T2 implements Runnable {TestSynA s;public T2(TestSynA sameObj) {this.s = sameObj;}// 线程2访问非同步方法public void run() {logger.debug("启动线程2...........");s.nonSyn();logger.debug("退出线程2...........");}}// 对象的同步方法public synchronized void syn() {logger.debug("▲▲▲▲▲▲线程1开始访问同步方法");try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}logger.debug("▲▲▲▲▲▲线程1退出同步方法");}// 对象的非同步方法public void nonSyn() {logger.debug("●●●●●●线程2开始访问非同步方法");for (int i = 0; i < 5; i++) {try {logger.debug("线程2正在访问非同步方法!!!");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}logger.debug("●●●●●●线程2退出非同步方法");}public static void main(String[] args) {// 这是多线程要访问的同一个对象TestSynA sameObj = new TestSynA();// 线程1访问同步方法, 线程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.TestSynA - 启动线程1...........0 [Thread-1] DEBUG basic.b_syn.TestSynA - 启动线程2...........1 [Thread-0] DEBUG basic.b_syn.TestSynA - ▲▲▲▲▲▲线程1开始访问同步方法1 [Thread-1] DEBUG basic.b_syn.TestSynA - ●●●●●●线程2开始访问非同步方法1 [Thread-1] DEBUG basic.b_syn.TestSynA - 线程2正在访问非同步方法!!!1001 [Thread-1] DEBUG basic.b_syn.TestSynA - 线程2正在访问非同步方法!!!2001 [Thread-1] DEBUG basic.b_syn.TestSynA - 线程2正在访问非同步方法!!!3001 [Thread-1] DEBUG basic.b_syn.TestSynA - 线程2正在访问非同步方法!!!3001 [Thread-0] DEBUG basic.b_syn.TestSynA - ▲▲▲▲▲▲线程1退出同步方法3001 [Thread-0] DEBUG basic.b_syn.TestSynA - 退出线程1...........4001 [Thread-1] DEBUG basic.b_syn.TestSynA - 线程2正在访问非同步方法!!!5001 [Thread-1] DEBUG basic.b_syn.TestSynA - ●●●●●●线程2退出非同步方法5001 [Thread-1] DEBUG basic.b_syn.TestSynA - 退出线程2...........
- Java多线程:线程同步——实验1
- Java多线程:线程同步——实验2
- Java多线程:线程同步——实验3
- Java多线程:线程同步——实验4
- Java多线程:线程同步——实验5
- java多线程——线程同步问题
- Java多线程——线程同步
- Java多线程——线程同步(2)
- Java多线程编程— 线程同步问题
- java多线程-线程同步
- java多线程-线程同步
- JAVA多线程:线程同步
- Java多线程-线程同步
- Java多线程-线程同步
- 多线程——线程同步
- Java多线程开发五——线程的同步
- Java多线程(五)——线程同步
- Java多线程——线程同步与锁
- Makefile Kconfig 内核配置————怎样在menuconfig中添加一个菜单选项
- Linux串口编程详解
- mock测试
- quartz集群完整应用实例
- Ajax模拟留言
- Java多线程:线程同步——实验1
- poj 1562 简单的BFS搜索
- Android学电子相册
- Android之完美退出方法(2.1-2.2-2.3SDK版本均测试通过)
- linux2.6.x的配置文件kconfig语法
- 深入研究java.lang.Class类
- MMU的作用
- Inversion of Control
- 我的山寨生涯(4)