背景介绍
前几天小米二面的时候面试官突然让手撕代码,现场敲一个两个线程交替打印奇偶数的程序。老实说自己的多线程这块知识挺欠缺的,多次面试慢慢地搜了了解了一些理论,真到敲代码其实还是挺无从下手的,借此机会记录一下,解决这个小小的问题
题目
用两个线程打印数字,一个线程打印奇数,一个线程打印偶数,直到100为止
代码
思路概述
主要做法还是通过synchronized和object的notify和wait方法来做,首先维护一个变量作为输出值,维护一个对象作为锁,判断数字是奇数时,线程t1获得锁,唤醒锁,打印对应数字,完了把数字加一,再让锁等待。对应的数字是偶数的时候,也做对应的逻辑。eclipse跑了一下程序是可以正常打印结果的
体会闲聊
做这个题当时自己也是基本照着这个想法去做,不过没有用到新建一个对象作为锁获取,数字是在循环内操作,可能写的时候是有点bug的,包括一紧张自己把线程写成多次start这种都有(明明前一天复习是有看到线程只能start一次的),但是好像面试官感受到了我的大概思路,主要逻辑应该也算通,加上其他问题答得还凑合,所以二面也过了。自己也是过了几天觉得还是要把这一个做一下,网上倒是有多种多样的做法,自己还是选择了同一个思路的来实现。不过倒是实现的时候有些细节还是调了好一下子,包括自己原先做法为啥有些语法不通还是好好琢磨了一下。sleep和wait,一个不释放锁,一个会释放锁,这个面试官也有再问。java的多线程的相关知识还是被视为java的大基本功的,自己还是抽空再加强加强