请问使用两个线程分别输出100以内的奇数和偶数,并按从小到大的顺序输出如何操作?

问题描述

]public synchronized void run(){oushu();qishu();}public void oushu(){ //偶数for (int i = 0; i < 101; i++) {if(i%2==0){System.out.println(Thread.currentThread().getName()+i);}}}public void qishu(){ //奇数for (int i = 0; i < 101; i++) {if(i%2!=0){引用

解决方案

例如 产生的奇数和偶数: 1,2,3,4 这样? 如果是这样应该是不行的 那个线程片段性的执行,就是有段时间是线程ou执行 有段时间是线程qi执行 但是执行的时候貌似是不能控制每个线程执行循环的次数 所以2个线程排序有点困难的
解决方案二:
public class Test15 implements Runnable{ int start=1;public Test15(int start){this.start=start;}@Overridepublic void run() {StringBuffer result= new StringBuffer(start+"");for(int i=0;i<49;i++){result.append(",");result.append(start+(i+1)*2);}System.out.println(result.toString());}public static void main(String[] args){new Thread(new Test15(1)).start();new Thread(new Test15(2)).start();}}
解决方案三:
呵呵,楼主这两个循环都可以把步长调整为每次+2,这样可以把里面判断为奇数还是偶数的代码省了。 这样,第一段执行完了之后,再让第二个线程开始执行,这个过程可以使用CountDownLatch来控制。或者使用阻塞队列,所有这些数据放到队列中,每个线程消费一个之后wait,同时notify让另一个线程来执行,这样达到分别输出的目的。
解决方案四:
可以用个线程池里面丢两个线程跑的如下:import java.util.concurrent.atomic.AtomicInteger;public class OddNumber implements Runnable{ private int maxNumber; private AtomicInteger number; private Object lock; public OddNumber(int maxNumber, AtomicInteger number, Object lock) { this.maxNumber = maxNumber; this.number = number; this.lock = lock; } public void run() { print(); } public void print() { while (number.get() < maxNumber + 1) { if (number.get() % 2 == 0) { System.out.println(Thread.currentThread().getName() + " --> " + number.getAndAdd(1)); synchronized (lock) { lock.notifyAll(); } } else { synchronized (lock) { try { lock.wait(); //wait for the lock } catch (InterruptedException e) { e.printStackTrace(); } } } } } }import java.util.concurrent.atomic.AtomicInteger;public class EvenNumber implements Runnable{ private int maxNumber; private AtomicInteger number; private Object lock; public EvenNumber(int maxNumber, AtomicInteger number, Object lock) { this.maxNumber = maxNumber; this.number = number; this.lock = lock; } public void run() { print(); } public void print() { while (number.get() < maxNumber + 1) { if (number.get() % 2 != 0) { System.out.println(Thread.currentThread().getName() + " --> " + number.getAndAdd(1)); synchronized (lock) { lock.notify(); // } } else { synchronized (lock) { try { lock.wait(); //wait for the lock } catch (InterruptedException e) { e.printStackTrace(); } } } } } }package com.mycompany.app6;import java.util.concurrent.Executor;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;public class PrintOddEvenNumbersWithTwoThreads{ public static void main(String[] args) { final int max = 10; final AtomicInteger i = new AtomicInteger(1); //start with 0 Executor dd = Executors.newFixedThreadPool(2); final Object lock = new Object(); dd.execute(new OddNumber(max, i, lock)); dd.execute(new EvenNumber(max, i, lock)); do { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } while (i.get() != max + 1); System.out.println("nDone"); System.exit(0); }}

时间: 2024-10-27 16:32:02

请问使用两个线程分别输出100以内的奇数和偶数,并按从小到大的顺序输出如何操作?的相关文章

两个线程打印到100,帮我看下为啥会打印到101

问题描述 两个线程打印到100,帮我看下为啥会打印到101 #include #include #include int N = 100;int n = 0;pthread_mutex_t mutex; void *func1(){ while (n < N+1) { pthread_mutex_lock(&mutex); printf (""%d 1n"" n); n++; pthread_mutex_unlock(&mutex); } if

c++-C++用递归方式输出100以内的质数

问题描述 C++用递归方式输出100以内的质数 要求用递归方式求100以内的质数,并且打印出来,每5个一行 解决方案 #include using namespace std; bool isPrime(int i){ for(int j=2;j<=i/2;j++){ if (i%j == 0){ return false; } } return true; } int main(void){ for(int i=2;i<100;i++){ if(isPrime(i)){ cout<&l

c 递归 全排列-请教大神:如何使全排列按从小到大的顺序输出?

问题描述 请教大神:如何使全排列按从小到大的顺序输出? 现在只能输出全排列. 代码如下: #include int main() { void change(int *a,int *b,int temp); void pai(int *num,int i,int n); int num[10]; int i,n; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;++i) num[i]=i+1; pai(num,0,n-1); printf

c++ 编程问题-按各字符的ASCII码从小到大的顺序输出这三个字符

问题描述 按各字符的ASCII码从小到大的顺序输出这三个字符 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符输入数据有多组,每组占一行,有三个字符组成,之间无空格. 对于每组输入数据,输出一行,字符中间用一个空格分开. #include"iostream" using namespace std; int main(int argc, char* argv[]) { char a,b,c; while((cin>>a>>b>>c)

android APP 最少有两个线程

问题描述 android APP 最少有两个线程 一个android APP 最少有两个线程,一个是IPCThreadState::joinThreadPool 另外 一个是looper 线程,来处理消息队列,请问这两个线程之间如何交互呢?什么时候交互? 解决方案 http://410063005.iteye.com/blog/1750632 解决方案二: android 线程间的通信http://www.cnblogs.com/allin/archive/2010/05/19/1738800.

每天敲两个代码-C源程序100例(加油)

编译命令 gcc 1.c -o 1 (-std=c99) gcc 3.c -lm -o 3 ./1 地址: http://fightingyanping.blog.163.com/blog/static/116572703201162633134771/ http://blog.csdn.net/zaojiahua/article/details/8684523 2014.2.28 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填

iOS两个线程间嵌套发送同步消息

 先上代码,主要逻辑可看注释.最好是直接下载demo再往下看了.demo下载地址:http://download.csdn.net/detail/hursing/5159144 @implementation ViewController #define kLevelsOfNesting 5 NSString *const kParameter = @"Parameter"; NSString *const kRunLoop = @"RunLoop"; - (voi

Linux下使用两个线程协作完成一个任务的简易实现

刚解决了之前的那个Linux下Pthread库的问题,这次就来使用两个线程来协作,共同完成一个求和的任务. 打一下基础吧 本次需要使用到的知识点有: lpthread,编译的时候用到,相当于一个声明的效果 pthread_mutex_t 作为一个锁对象而存在 pthread_create,创建一个新线程的函数调用 pthread_t ,线程的类型 代码展示 #include <stdio.h> #include <stdlib.h> //多线程库的引用 #include<pt

c语言-C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写。

问题描述 C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写. C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写. 解决方案 #include <stdio.h> void fun(int n) { if(n<100 || n>1000) return; int a,b,c; c=n%10; b=n/10%10; a=n/100%10; if(a*a*a+b*b*b+c*c*c == n) printf("%dn",n);