java两个线程轮流输出奇数和偶数到100
2018-03-13 21:45
330 查看
刚刚被面试完阿里实习的笔试题目。遇到的是一到多线程题目。
题目:创建两个线程,一个线程输出1,3,5,7.另一个线程输出2,4,6,8.输出到100为止
我考后才想出来的一个写法:public class Main2
{
public static void main(String[] arg)
{
MyThread a = new MyThread(), b = new MyThread();
Lock lock=new Lock();
a.lock=lock;
b.lock=lock;
a.start();
b.start();
}
}
class Lock
{
int lock=1;
int id=0;
int current=0;
}
class MyThread extends Thread
{
Lock lock;
public void run()
{
while (true)
{
synchronized (lock)
{
if(lock.lock>100)
break;
lock.current=(int) this.getId();
if(lock.id==lock.current)//不是这个锁
continue;
System.out.println(this.getId() + " " + lock.lock++);
lock.id=lock.current;
}
}
}
}第一次面试。紧张的要死。死也想不出。考官提醒了一个用notify和wait的方法。可惜我没用过。现在我花了1小时梳理了下情绪才用我学过的知识打了出来。额。可能不是最优的方法。但是肯定比睡眠100毫秒来的高效。
题目:创建两个线程,一个线程输出1,3,5,7.另一个线程输出2,4,6,8.输出到100为止
我考后才想出来的一个写法:public class Main2
{
public static void main(String[] arg)
{
MyThread a = new MyThread(), b = new MyThread();
Lock lock=new Lock();
a.lock=lock;
b.lock=lock;
a.start();
b.start();
}
}
class Lock
{
int lock=1;
int id=0;
int current=0;
}
class MyThread extends Thread
{
Lock lock;
public void run()
{
while (true)
{
synchronized (lock)
{
if(lock.lock>100)
break;
lock.current=(int) this.getId();
if(lock.id==lock.current)//不是这个锁
continue;
System.out.println(this.getId() + " " + lock.lock++);
lock.id=lock.current;
}
}
}
}第一次面试。紧张的要死。死也想不出。考官提醒了一个用notify和wait的方法。可惜我没用过。现在我花了1小时梳理了下情绪才用我学过的知识打了出来。额。可能不是最优的方法。但是肯定比睡眠100毫秒来的高效。
相关文章推荐
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- Java两个线程轮换打印1-100内的奇数和偶数
- 使用两个线程交替打印0到100的奇数和偶数
- java两个线程打印奇数和偶数
- JAVA基础(2) -- 两个线程轮流打印1-100
- 1.写一个函数返回参数二进制中 1 的个数;2..获取一个数二进制序列中所有的偶数位和奇数位;3. 输出一个整数的每一位;4.两个int整数的二进制表达中,有多少个位不同
- 多线程技术: 两个线程交替打印奇数和偶数
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
- java基础代码实例 求1-100之间的奇数和偶数
- java基础代码实例 求1-100之间的奇数和偶数
- java程序打印0~100的偶数和奇数
- java循环练习:输出1——100之间的奇数,每行输出5个数字
- 1、写一个函数返回参数二进制中 1 的个数(三种方法)2、获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列3、输出一个整数的每一位。4、两个int(32位)整数m和n的二进制表达中,有多
- 输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT” (要求用条件表达式进行判断,不使用if语句)
- 利用数组找出100以内的奇数、偶数将它们分别输出
- Java 线程控制(输出奇偶数)
- Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。 Input 输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义