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

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

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

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

  • 写回答

1条回答 默认 最新

  • iteye_13500 2010-02-08 05: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 在ros2的iron版本进行编译时遇到如下问题
  • ¥18 vs用setup project打包项目实现安装完立即运行
  • ¥15 孟德尔随机化TwoSampleMR在线提取结局数据,遇到Error in check_reset(override_429)的问题
  • ¥15 ONNX转RKNN遇到问题
  • ¥60 以太网电缆未接通怎么处理
  • ¥15 关于超声图片进行放射组学的疑问
  • ¥20 已经有功率放大电路图,具体每个元器件的参数怎么算?
  • ¥15 用GIS怎么提取出一个城市的中心城区
  • ¥30 matlab代码调试
  • ¥15 使用ruoyi分离版,下载完成引成功第三方插件报错,报错,换了好多插件都是一样的。
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部