四个线程t1,t2,t3,t4,向4个文件中写入数据,t1只能写入1,t2只能写入2,t3只能写入3,t4只能写入4,对4个文件A,B,C,D写入如下内容:
A:123412341234.....
B:234123412341....
C:341234123412....
D:412341234123....
怎么实现同步可以让线程并行工作?


import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;public class Hello
{static boolean b=false;static ReentrantLock lock=new ReentrantLock();         static ReentrantLock lock_2=new ReentrantLock();static Condition condition_for=lock.newCondition();//线程Thread_t1~Thread_t4分别只写入1~4class Thread_t1 extends Thread{String path;Thread_t1(String path){this.path=path;}public void run(){print(path,1);}}class Thread_t2 extends Thread{String path;Thread_t2(String path){this.path=path;}public void run(){print(path,2);}}class Thread_t3 extends Thread{String path;Thread_t3(String path){this.path=path;}public void run(){print(path,3);}}class Thread_t4 extends Thread{String path;Thread_t4(String path){this.path=path;}public void run(){print(path,4);}}//写入方法public void print(String path, int i){lock_2.lock();PrintWriter pw=null;try {pw=new PrintWriter(new FileWriter("c:/work/abcd/"+path+".txt",true),true);pw.print(i);} catch (Exception e) {e.printStackTrace();}finally{pw.close();lock_2.unlock();}}//文件类A~Dclass File_A implements Runnable{int one,two,three,four;File_A(int one,int two, int three, int four){this.one=one;this.two=two;this.three=three;this.four=four;}public void run(){for(int x=0;x<100;x++){select("A",one,two,three,four);}}}class File_B implements Runnable{int one,two,three,four;File_B(int one,int two, int three, int four){this.one=one;this.two=two;this.three=three;this.four=four;}public void run(){for(int x=0;x<100;x++){select("B",one,two,three,four);}}}class File_C implements Runnable{int one,two,three,four;File_C(int one,int two, int three, int four){this.one=one;this.two=two;this.three=three;this.four=four;}public void run(){for(int x=0;x<100;x++){select("C",one,two,three,four);}}}class File_D implements Runnable{int one,two,three,four;File_D(int one,int two, int three, int four){this.one=one;this.two=two;this.three=three;this.four=four;}public  void  run(){for(int x=0;x<100;x++){select("D",one,two,three,four);}}}
//选择线程方法,当前只允许进入一个文件线程public   void select(String path,int one,int two, int three, int four){lock.lock();try{while(b){condition_for.await();}b=true;int[] order={one,two,three,four};//将传入的1234,换成数组方便用for遍历for(int i:order){switch(i){case 1:Thread_t1 t1= new Thread_t1(path);t1.start();t1.join();          //t1.join()是等线程t1执行完后再执行当前线程break;case 2:Thread_t2 t2= new Thread_t2(path);t2.start();t2.join();break;case 3:Thread_t3 t3= new Thread_t3(path);t3.start();t3.join();break;case 4:Thread_t4 t4= new Thread_t4(path);t4.start();t4.join();break;}  }b=false;}catch(Exception e){e.printStackTrace();}finally{lock.unlock();}}//主函数public static void main(String args[]){HelloJava hj=new HelloJava();new Thread(hj.new File_A(1,2,3,4)).start();new Thread(hj.new File_B(2,3,4,1)).start();new Thread(hj.new File_C(3,4,1,2)).start();new Thread(hj.new File_D(4,1,2,3)).start();}
}




												

一道关于笔试的多线程题目相关推荐

  1. C/C++ 笔试、面试题目大汇总

    C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...

  2. 中信银行c语言笔试题库,中信银行笔试题型及题目

    中信银行笔试题型及题目 考试题型 一:专业知识(2个小时) 1.专业知识单选,60题,每题1分. 2.专业知识多选,20题,每题1分,未选全即少选得0.5分,错选.漏选得0分. 3.英语阅读,20分, ...

  3. 关于一道华为笔试题目考奈奎斯特频率相关的解析

    题目内容 这道题目考察奈奎斯特采样频率相关 背景知识 香农采样定理 香农采样定理,又称奈奎斯特采样定理,是信息论,特别是通讯与信号处理学科中的一个重要基本结论.1924年奈奎斯特(Nyquist)就推 ...

  4. 阿里实习生笔试程序检测题目

    昨天晚上偶然看到同学在做阿里实习生笔试中的程序编码检测,题目如下给定两个数组A和B,假定其中有四个元素即为:A=[a1,a2,a3,a4]  B=[b1,b2,b3,b4]; 那么将B中的元素插入到A ...

  5. 一道很有意思的面试题目,快加入到这场头脑风暴游戏里吧~

    小伙伴们,小叶秋最近看到一个面试题目,感觉挺有意思的,大意如下: ok,大家看到这个题,可以先理解下,这里启动了两个线程,a 和 b,但是虽然说 a 在 b 之前 start,不一定就可以保证线程 a ...

  6. 嵌入式C语言方面面试、笔试经典问题/题目

    转自:https://blog.csdn.net/ffmxnjm/article/details/51519976:感谢博主:ffmxnjm整理 第一部分:基本概念及其它问答题 3 1.关键字stat ...

  7. 一道有意思的找规律题目 --- CodeForces - 964A

    题目连接: https://vjudge.net/problem/1502082/origin 这一题第一眼看过去貌似是模拟,但是根据其范围是1e9可以知道,如果暴力解基本上是不可能的(不排除大佬级优 ...

  8. 一道有趣的C#考试题目

    题目:猫叫,老鼠逃跑,主人惊醒.(10分) 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法.2. 对老鼠和主人进行抽象 评分标准: <1>.构造出Cat.Mouse.Ma ...

  9. 多线程题目 2019.06.02 晚

    使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象,房屋中的一桶水被猫和狗共享.猫和狗轮流喝水(狗喝的多,猫喝的少),当水被喝尽时,猫和狗进入死亡状态.猫或狗 ...

最新文章

  1. linux 脚本的作用,shell export 作用
  2. 内存分配器设计的演进
  3. python网络编程——简单例子
  4. 按字符串长度切割字符串(支持汉字占2个长度)
  5. tablepc是什么平板电脑_54位平板电脑充电柜长什么样?安和力
  6. 2021-07-07
  7. 休眠锁定模式–乐观锁定模式如何工作
  8. Python爬虫入门三urllib库基本使用
  9. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
  10. uwp 获取listviewitem里的控件_[UWP]占领标题栏
  11. 最新xmlns:android=http://schemas.android.com/apk/res/android的理解
  12. 开源电路仿真软件CircuitJS1介绍与使用入门
  13. 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(七)
  14. Guthrie QA-CAD2019(CAD绘图修订管理工具)A.04中文版
  15. ppt助手网络服务器如何设置在哪里,网络服务器配置与管理ppt课件.ppt
  16. Easy_CHM生成CHM时出现的目录和索引中文乱码脚本错误
  17. python 网络 select
  18. 【2022第十三届蓝桥杯】c/c++ 大学c组 解题报告
  19. 2022社群扫码进群活码完整系统源码+修复版的
  20. ADG备库mrp和rfs进程

热门文章

  1. optfine的jar文件打不开_JAVA版1.14.4 装了最新版的optifine游戏打不开了 求助大佬们...
  2. c语言尚未实现的虚拟函数,编译原理之学习 lua 1.1 笔记 (二) 函数调用与局部变量...
  3. 七、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(上)
  4. SVM支持向量机(上)
  5. 清华大学高阳:Mastering Atari Games with Limited Data
  6. 强大的NVAE:以后再也不能说VAE生成的图像模糊了
  7. 三招武林绝学带你玩转「强化学习」
  8. java的继承_java中的继承(一)
  9. vue中页面跳转传值_vue的页面跳转方式和传值、取值
  10. win10无线投屏_日臻薄技 | 手机如何投屏到电脑