本帖最后由 sanguodouble1 于 2014-3-6 19:28 编辑
刚才在网上看到一道关于同步线程的笔试题,
自己整理如下
- package Luntai;
- //直接将此类定义为线程类
- public class Test1 implements Runnable {
- // 一个成员变量
- int b = 100;
-
- // 不多说,重写run()
- public void run() {
- m1();
- }
-
- public synchronized void m1() {
- b = 1000;
- // 等个5秒
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("m1方法输出" + b);
- }
-
- public void m2() {
- System.out.println("m2方法输出" + b);
- }
-
- public static void main(String[] args) {
- Test1 mt = new Test1();
- Thread tt = new Thread(mt);
- // 用tt线程调m1方法
- tt.start();
-
- // 等个半秒,确保tt拿到了同步锁
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- // 然后用主线程调用m2方法
- mt.m2();
-
- }
- }
复制代码
问,程序的输出结果?
自己分析了下有3种可能
1.
m2方法输出1000
m1方法输出1000
2.
m2方法输出100
m1方法输出1000
3.在m1执行完前m2不能执行,所以是
m1方法输出1000
m2方法输出1000
由于同步学的比较久了,很多都忘了,坐等详见,另外自己查资料中
自我补充:如果方法m2也加上synchronized关键字,答案又是怎么样的呢?
|