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

多线程中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方法还是执行了。

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

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行