goshimo 2010-02-08 12:56
浏览 263
已采纳

多线程中Synchronized来标记run()方法的问题

若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。

这段话怎么理解?能否帮我写一个程序以助于理解一下呢?

  • 写回答

1条回答 默认 最新

  • iteye_13500 2010-02-08 13:06
    关注

    哪里看到的? ms在java中对Thread类的run方法加synchronized 并不会锁住对象:

    [code="java"]// 线程类
    public class MyExtendThread extends Thread {

    private int count = 1, number;
    
    public MyExtendThread(int num) {
        number = num;
        System.out.println("Create Thread-" + number);
    }
    
    @Override
    public synchronized void run() {
        while (true) {
            System.out.println("Thread-" + number + " run " + count
                    + " time(s)");
            if (++count == 3)
                return;
        }
    }
    
    public synchronized void canRun() {
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("========");
    }
    

    }[/code]

    [code="java"]//测试类
    public class TestThread {
    public static void main(String[] args) {
    MyExtendThread thread = new MyExtendThread(1);
    thread.start();
    thread.canRun();
    System.out.println("end");
    }
    }[/code]

    [code="java"]运行结果

    Create Thread-1

    end
    Thread-1 run 1 time(s)
    Thread-1 run 2 time(s)[/code]

    线程类的canRun方法还是执行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 这个复选框什么作用?
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决