前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >阿里多线程面试题

阿里多线程面试题

作者头像
全栈开发日记
发布2022-05-13 14:25:06
1950
发布2022-05-13 14:25:06
举报
文章被收录于专栏:全栈开发日记

要求:

两个线程,一个输出数字,一个输出字母,交替输出以下内容:

代码语言:javascript
复制
1 A 2 B 3 C 4 D ...26 Z

实现很简单,怎样用最少的代码,最短的时间实现?

构想:

① 创建两个字符数组,一个存放1-26数字,一个存放A-Z字母。

② 创建两个线程,一个线程循环输出数字,一个线程循环输出字母。

③ 先让输出字母线程处于阻塞状态,等待唤醒。

④ 输出数字线程做出一次输出动作后,唤醒字母线程,自己(数字线程)处于阻塞状态,等待唤醒。

⑤ 输出字母线程被唤醒,做出一次输出动作后,唤醒数字线程,自己(字母线程)处于阻塞状态,等待唤醒。

⑥ 如此循环,可实现交替输出内容。

代码:

代码语言:javascript
复制
/**
 * 循环输出1A 2B 3C 4D
 */
public class TestB {
    static Thread t1;
    static Thread t2;

    public static void main(String[] args) throws Exception{
        char[] arr1 = "ABCDEFG".toCharArray();
        char[] arr2 = "1234567".toCharArray();

        t1 = new Thread(() -> {
            for (int a=0;a<arr1.length;a++) {
                LockSupport.park();//阻塞
                System.out.println(arr1[a]);
                LockSupport.unpark(t2);//唤醒
            }
        },"t1");

        t2=new Thread(() -> {
            for (int b=0;b<arr2.length;b++) {
                System.out.println(arr2[b]);
                LockSupport.unpark(t1);//唤醒
                LockSupport.park();//阻塞
            }
        },"t2");

        t1.start();//启动线程t1
        t2.start();//启动线程t2
    }
}

关键方法:

LockSupport类:

LockSupport是一个用于线程阻塞的工具类,该类中的方法都是静态方法。可以实现让线程在任意位置阻塞和等待唤醒。

代码语言:javascript
复制
//两个主要方法:
LockSupport.unpark(t1);//唤醒指定线程
LockSupport.park();//阻塞当前线程
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要求:
  • 构想:
  • 代码:
  • 关键方法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档