java例程练习(关于线程同步的补充)
2012-05-05 20:53
302 查看
/* * 从运行结果看,当m1()方法被锁定后,m2()方法仍然可以执行。 * 而且b的值被改变。由此可以得出结论: * sychronized 只是防止其定义的代码段被同时调用。 * */ public class Test implements Runnable{ int b = 100; public synchronized void m1() throws Exception { b = 1000; Thread.sleep(5000); System.out.println("b = " + b); } public void m2() { System.out.println(b); } public void run() { try { m1(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Test t = new Test(); Thread th = new Thread(t); th.start(); Thread.sleep(1000);//确保线程启动 t.m2(); } } /* 运行结果: 1000 b = 1000 */
/* * 从运行结果看,当m1()方法被锁定后,m2()方法仍然可以执行。 * 而且b的值被改变。由此可以得出结论: * sychronized 只是防止其定义的代码段被同时调用。 * 将m2()锁定后,更改部分代码结果??? * */ public class Test implements Runnable{ int b = 100; public synchronized void m1() throws Exception { b = 1000; Thread.sleep(5000); System.out.println("b = " + b); } public synchronized void m2() throws Exception { Thread.sleep(2500); b = 2000; } public void run() { try { m1(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Test t = new Test(); Thread th = new Thread(t); th.start(); Thread.sleep(1000);//确保线程启动 t.m2(); System.out.println(t.b); } } /* 运行结果: b = 1000 2000 */
相关文章推荐
- java例程练习(关于线程同步的补充)
- java例程练习(关于线程同步的补充)
- java例程练习(关于内部类的一个非常重要的作用)
- java例程练习(关于内部类的一个非常重要的作用)
- java例程练习(多线程[线程同步问题])
- java例程练习(多线程[线程同步问题])
- java例程练习(多线程[线程同步问题])
- java例程练习(关于重写[overwrite/override])
- java例程练习(控制台参数与基础数据类型的包装类)
- java有关于数组的几个练习
- java例程练习(StringBuffer类)
- java例程练习(将string转成double)
- java例程练习(用递归方法列出文件目录)
- java例程练习(Iterator)
- java例程练习(List常用算法)
- java例程练习(用HashMap记录控制台输入)
- java例程练习(转换流)
- java例程练习(对象流)
- java例程练习(多线程的两种创建方式)
- java例程练习(多线程[sleep()方法])