Google面试题 多线程写文件
来源:互联网 发布:淘宝hm代购是真的吗 编辑:程序博客网 时间:2024/05/16 09:27
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:
A:1 2 3 4 1 2....
B:2 3 4 1 2 3....
C:3 4 1 2 3 4....
D:4 1 2 3 4 1....
请设计程序。
程序:
思路:
观察文件内容可得线程1 访问文件的次序为 A-B-C-D-A-B-C-D.....
线程2 访问文件的次序为 B-A-D-C-B-A-D-C
线程3 访问文件的次序为 C-B-A-D-C-B-A-D
线程4 访问文件的次序为 D-C-B-A-D-C-B-A
所以可以这样设计程序,使用CyclicBarrier 类,线程1 访问A,然后调用CyclicBarrier 的await方法.线程2 访问B,然后调用CyclicBarrier 的await方法.线程3 访问C,然后调用CyclicBarrier 的await方法。线程4 访问D,然后调用CyclicBarrier 的await方法。此时四个线程都访问完了文件,并处在同一”起跑线上“。接着线程1 访问B,然后调用CyclicBarrier 的await方法,其他线程依次类推。
代码如下:
public class Google {public static void main(String[] args) throws IOException {File fa = new File("G:/A.txt");File fb = new File("G:/B.txt");File fc = new File("G:/C.txt");File fd = new File("G:/D.txt"); FileWriter fisa ; FileWriter fisb ; FileWriter fisc ; FileWriter fisd ; //new InputStreamReader(new FileInputStream(file),"UTF-8") fisa =new FileWriter(fa);fisb = new FileWriter(fb);fisc = new FileWriter(fc);fisd = new FileWriter(fd); CyclicBarrier cb = new CyclicBarrier(4);new Thread(new Taska(fisa,fisb,fisc,fisd,cb)).start();new Thread(new Taskb(fisa,fisb,fisc,fisd,cb)).start();new Thread(new Taskc(fisa,fisb,fisc,fisd,cb)).start();new Thread(new Taskd(fisa,fisb,fisc,fisd,cb)).start();}} class Taska implements Runnable{ CyclicBarrier cb ; FileWriter fisa ; FileWriter fisb ; FileWriter fisc ; FileWriter fisd ; public Taska( FileWriter fisa , FileWriter fisb , FileWriter fisc , FileWriter fisd , CyclicBarrier cb){ try {this.fisa = fisa;this.fisb = fisb;this.fisc = fisc;this.fisd = fisd;this.cb = cb;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }@Overridepublic void run() {try {while(true){fisa.write("1");fisa.flush();cb.await();fisd.write("1");fisd.flush();cb.await();fisc.write("1");fisc.flush();cb.await();fisb.write("1");fisb.flush();cb.await();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} } class Taskb implements Runnable{ CyclicBarrier cb ; FileWriter fisa ; FileWriter fisb ; FileWriter fisc ; FileWriter fisd ; public Taskb( FileWriter fisa , FileWriter fisb , FileWriter fisc , FileWriter fisd , CyclicBarrier cb){ try {this.fisa = fisa;this.fisb = fisb;this.fisc = fisc;this.fisd = fisd;this.cb = cb;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }@Overridepublic void run() {try {while(true){fisb.write("2");fisb.flush();cb.await();fisa.write("2");fisa.flush();cb.await();fisd.write("2");fisd.flush();cb.await();fisc.write("2");fisc.flush();cb.await();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} } class Taskc implements Runnable{ CyclicBarrier cb ; FileWriter fisa ; FileWriter fisb ; FileWriter fisc ; FileWriter fisd ; public Taskc( FileWriter fisa , FileWriter fisb , FileWriter fisc , FileWriter fisd , CyclicBarrier cb){ try {this.fisa = fisa;this.fisb = fisb;this.fisc = fisc;this.fisd = fisd;this.cb = cb;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }@Overridepublic void run() {try {while(true){fisc.write("3");fisc.flush();cb.await();fisb.write("3");fisb.flush();cb.await();fisa.write("3");fisa.flush();cb.await();fisd.write("3");fisd.flush();cb.await();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} } class Taskd implements Runnable{ CyclicBarrier cb ; FileWriter fisa ; FileWriter fisb ; FileWriter fisc ; FileWriter fisd ; public Taskd( FileWriter fisa , FileWriter fisb , FileWriter fisc , FileWriter fisd , CyclicBarrier cb){ try {this.fisa = fisa;this.fisb = fisb;this.fisc = fisc;this.fisd = fisd;this.cb = cb;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }@Overridepublic void run() {try {while(true){fisd.write("4");fisd.flush();cb.await();fisc.write("4");fisc.flush();cb.await();fisb.write("4");fisb.flush();cb.await();fisa.write("4");fisa.flush();cb.await();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} }
0 0
- Google面试题 多线程写文件
- google多线程面试题
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值
- 多线程之--google面试题
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值(待更新)
- 新浪面试题-多线程合并文件
- java面试题---请用多线程写死锁
- Google 面试题讨论
- 小小Google面试题
- google面试题
- 面试题2-- Google
- google面试题
- google面试题
- Google 的面试题
- Google面试题
- 一道Google面试题
- google 面试题 分享
- 但是反过来看地方价格来看收到了恐惧感
- wifi驱动的理解(1)——驱动架构
- conv2、filter2、imfilter的区别
- [android]今日没记住
- 2015年4月CSS3学习笔记
- Google面试题 多线程写文件
- HDU 1150 — Machine Schedule 最小顶点覆盖
- JQuery中$.ajax()方法参数详解
- STM32通用定时器原理
- wifi驱动的理解(2)——usb接口在wifi模块中的角色
- Android学习第三天 --文件读写操作
- 获取运行时泛型的实际类型
- Hello world
- 切水果