美文网首页
Leetcode Concurrency本地调试 - Q1114

Leetcode Concurrency本地调试 - Q1114

作者: Lyudmilalala | 来源:发表于2020-05-19 13:16 被阅读0次

并发项目的经历不多,之前没见过参数是Runnable的方法,所以虽然题目本身不难,但还是花了一番力气去理解到底怎么运行调试这段代码,记录一下。

class Foo {     
        
    Semaphore twolock = new Semaphore(1);;
    Semaphore threelock = new Semaphore(1);
        
    public Foo() {
        try {           
            twolock.acquire();
            threelock.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }   
    }
        
    public void first(Runnable printFirst) throws InterruptedException {
        printFirst.run();
        twolock.release();
    }
        
    public void second(Runnable printSecond) throws InterruptedException {
        twolock.acquire();
        printSecond.run();
        threelock.release();
    }

    public void third(Runnable printThird) throws InterruptedException {
        threelock.acquire();
        printThird.run();
    }

        public static void main(String[] args) {
                Foo foo = new Foo();
        
        //create a runnable, and then create a thread base on it
                //wrap the runnables in foo functions, so they can share the same foo object
                Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("one");
            }
        };
        Thread t1 = new Thread(() -> {
                        try {
                                foo.first(r1);
                        } catch (InterruptedException e) {
                                 e.printStackTrace();
                        }
                });

                //if runnable is simple, can directly override it in the thread initialization
                Thread t2 = new Thread(() -> {
                         try {
                                 foo.second(() -> System.out.print("two"));
                         } catch (InterruptedException e) {
                                 e.printStackTrace();
                         }
                 });

                Thread t3 = new Thread(() -> {
                         try {
                                 foo.third(() -> System.out.print("three"));
                         } catch (InterruptedException e) {
                                 e.printStackTrace();
                         }
                 });
        
                //run threads
                try {
                t1.start();
                t2.start();
                t3.start();
        
                t1.join();
                t2.join();
                t3.join();
         } catch (InterruptedException e) {
                e.printStackTrace();
         }
        }
}

Leetcode CN - 1114 Print in Order 我的题解

相关文章

  • Leetcode Concurrency本地调试 - Q1114

    并发项目的经历不多,之前没见过参数是Runnable的方法,所以虽然题目本身不难,但还是花了一番力气去理解到底怎么...

  • 27.LeetCode C++ 本地调试

    LeetCode C++ 本地调试 LeetCode中使用在线编辑器可以很方便的进行答题,但对我们这种菜鸟还是喜欢...

  • C# wwm.LeetcodeHelper工具的使用

    说明 本文是使用C#刷Leetcode的本地调试配置说明 使用vscode配合命令行方式 此文是使用vscode创...

  • 调试手段

    本地调试 远程调试

  • nodejs调试

    本地调试

  • 在Clion上调试LeetCode代码

    在Clion上调试LeetCode代码 在leetcode上做题调试起来总有些不方便,所以查阅了一些资料后,按以下...

  • Flink1.10.0与Hive3.1.2集成详细步骤

    背景 Flink Hive 集成介绍 Flink集群设置 本地开发调试本地开发调试提示 Git相关项目 本文记录了...

  • 远程调试代码

    远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试。生产环境...

  • eclipse上传项目到github操作步骤

    背景在本地尝试Jenkins跑TestNG接口测试时,需要多次调试,就将本地代码上传到github仓库来配合调试。...

  • 页面访问调试

    本地(一个局域网环境)调试 用过电脑本地服务器,进行本地(一个局域网环境)跨设备调试 开启本地服务器的途径:wam...

网友评论

      本文标题:Leetcode Concurrency本地调试 - Q1114

      本文链接:https://www.haomeiwen.com/subject/gxfbohtx.html