Google面试题(java)—有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD
2016-02-20 22:59
591 查看
转自:http://blog.csdn.net/b275518834/article/details/8750142
C++ 不过不完整
import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class CallThread { private static class MyRunable implements Runnable { int index = 0; int max = 4 * 2; HashMap<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>(); { for (int i = 0; i < 4; i++) { map.put(i, new ArrayList<Integer>()); } } boolean isRunning = true; public synchronized void run() { while (true) { int name = Integer.valueOf(Thread.currentThread().getName()); while (index % 4 != name) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (!isRunning) { return; } } try { Thread.sleep(1000); } catch (InterruptedException e) { } for (int i = 0, arrIndex = index; i < 4; i++ ) { try { if (arrIndex-- < 0) { break; } List<Integer> list = map.get(i); if (list.size() < max) { list.add(name + 1); } } catch (Exception e) { } } System.err.println("A:" + map.get(0)); System.err.println("B:" + map.get(1)); System.err.println("C:" + map.get(2)); System.err.println("D:" + map.get(3)); System.err.println("-----------------------"); if (map.get(map.size()-1).size() == max) { isRunning = false; this.notifyAll(); return; } else { index++; } this.notifyAll(); } } } public static void main(String[] args) throws InterruptedException { Runnable runable = new MyRunable(); for (int i = 0; i < 4; i++) { Thread t = new Thread(runable); t.setName(String.valueOf(i)); t.start(); } } }
C++ 不过不完整
1 #include <iostream> 2 #include <stdlib.h> 3 #include <pthread.h> 4 using namespace std; 5 6 pthread_mutex_t myloack=PTHREAD_MUTEX_INITIALIZER; 7 pthread_cond_t mycond=PTHREAD_COND_INITIALIZER; 8 int n=0; 9 void *ThreadFunc(void *arg) 10 { 11 int num=(int )arg; 12 for (int i = 0; i < 10; ++i) 13 { 14 pthread_mutex_lock(&myloack); 15 while (n!=num)//1号线程第一次执行时直接跳过 16 pthread_cond_wait(&mycond,&myloack);//因为多个线程共用一个条件变量,所以在田间变量被signal后,需要用while来确定是否本线程获得执行权 17 18 if (num==0) 19 cout<<"1"; 20 else if(num==1) 21 cout<<"2"; 22 else if(num==2) 23 cout<<"3"; 24 else 25 cout<<"4"<<endl; 26 n=(n+1)%4; 27 pthread_mutex_unlock(&myloack); 28 pthread_cond_broadcast(&mycond); 29 } 30 return (void *)0; 31 } 32 33 int main(int argc, char const *argv[]) 34 { 35 36 pthread_t id[4]; 37 for (int i = 0; i < 4; ++i) 38 { 39 int err=pthread_create(&id[i],NULL,ThreadFunc,(void *)i); 40 if (err!=0) 41 { 42 cout<<"create err:"<<endl; 43 exit(-1); 44 } 45 46 } 47 48 for (int i = 0; i < 4; ++i) 49 { 50 int ret=pthread_join(id[i],NULL); 51 if (ret!=0) 52 { 53 cout<<"join err:"<<endl; 54 exit(-1); 55 } 56 } 57 return 0; 58 }
相关文章推荐
- 实习生面试题目
- 2015年iOS面试题整理
- 程序员为什么要写博客
- iOS常见面试题汇总
- IOS 面试
- 2016.2.20 面试归来
- 程序员的故事 001 小眼镜入职
- java - 常见面试题
- 心路历程(五)-find work and find house
- 前端程序员必知的30个Chrome扩展-[转载]
- 【面试题】向一个长度为100的int数组,插入1-100的随机数,不能重复
- 这几年遇到的奇葩程序员(1)
- 《程序是怎么跑起来的》读书笔记二-对程序员来说CPU是什么
- Java程序员应该知道的10个调试技巧
- 百度校招面试题
- 面试需知
- PHP面试题汇总(一)
- 项目维护开发:一个优秀程序员从接手到熟悉的智慧
- 笔试面试题之SplitIp(出自网易)
- 笔试面试题之friend set(出自网易)