searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Java线程使用之Locksupport

2023-10-27 06:59:06
1
0

Locksupport类可以实现线程的使用和唤醒

    park(): 阻塞当前线程
    unpark(thread): 唤醒指定线程

使用举例:a,b,c三个线程同时启动,a线程打印a,b线程打印b,c线程打印c,如何用Java代码实现按顺序打印abc,循环十次。

public static void main(String[] args) {
        Thread a,b,c;
        a = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"a");
        b = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"b");
        c = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"c");
        a.start();
        b.start();
        c.start();
        int count = 1;
        for(;;){
            if(!a.isAlive() && !b.isAlive() && !c.isAlive()){
                break;
            }
            if(count%3 == 1){
                LockSupport.unpark(a);
            }
            if(count%3 == 2){
                LockSupport.unpark(b);
            }
            if(count%3 == 0){
                LockSupport.unpark(c);
            }
            try {
                // 主线程休眠10毫秒是为了把cpu的使用权让给 a/b/c 线程
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count++;
        }
    }

0条评论
作者已关闭评论
汪****翔
3文章数
0粉丝数
汪****翔
3 文章 | 0 粉丝
汪****翔
3文章数
0粉丝数
汪****翔
3 文章 | 0 粉丝
原创

Java线程使用之Locksupport

2023-10-27 06:59:06
1
0

Locksupport类可以实现线程的使用和唤醒

    park(): 阻塞当前线程
    unpark(thread): 唤醒指定线程

使用举例:a,b,c三个线程同时启动,a线程打印a,b线程打印b,c线程打印c,如何用Java代码实现按顺序打印abc,循环十次。

public static void main(String[] args) {
        Thread a,b,c;
        a = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"a");
        b = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"b");
        c = new Thread(() -> {
            LockSupport.park();
            for(int i=0;i<10;i++){
                System.out.print(Thread.currentThread().getName());
                LockSupport.park();
            }
        },"c");
        a.start();
        b.start();
        c.start();
        int count = 1;
        for(;;){
            if(!a.isAlive() && !b.isAlive() && !c.isAlive()){
                break;
            }
            if(count%3 == 1){
                LockSupport.unpark(a);
            }
            if(count%3 == 2){
                LockSupport.unpark(b);
            }
            if(count%3 == 0){
                LockSupport.unpark(c);
            }
            try {
                // 主线程休眠10毫秒是为了把cpu的使用权让给 a/b/c 线程
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count++;
        }
    }

文章来自个人专栏
Java源码分析
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0