`
wang吖
  • 浏览: 234720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求指点(一朋友写的)

阅读更多
package com.jwzx.vo;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;

import org.apache.log4j.Logger;

/**
* 题目如下:
* 现有 4个文件 4个线程
* thread1 向文件中写入1
* thread2 向文件中写入2
* thread3 向文件中写入3
* thread4 向文件中写入4
* 启动4个线程,最终得到4个文件输出如下:
* file1 ----> 123412341234...
* file2 ----> 213421342134...
* file3 ----> 312431243124...
* file4 ----> 412341234123...
* 请用程序模拟这一过程
*
* synchronize 是一种锁机制(不属于公平锁/非公平锁)
* ReentrantLock 此类的构造方法接受一个可选的公平参数(属于公平锁/非公平锁)
* FileWriter 内部提供锁机制(属于公平锁/非公平锁)
* 可以看日志
*
*/

public class TestReentrantLock1 {
private static final Logger log = Logger.getLogger(TestReentrantLock1.class);
private static final String[] files = {
"D:\\work\\text1.txt",
"D:\\work\\text2.txt",
"D:\\work\\text3.txt",
"D:\\work\\text4.txt"
};
private static final ReentrantLock[] locks = {new ReentrantLock()
,new ReentrantLock()
,new ReentrantLock()
,new ReentrantLock()
};
private static final Object[] objs ={new Object()
,new Object()
,new Object()
,new Object()
};
static {
for (int i = 0; i < files.length; i++) {
File file = new File(files[i]);
FileWriter out;
try {
out = new FileWriter(file);
out.write("");
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* thread1  往文件写 1 的时间,
* thread2  往文件写 2 的时间,
* thread3  往文件写 3 的时间,
* thread4  往文件写 4 的时间
* 时间等差
*/
private static final int quan = 20;
// 写文件的单位时间
private static final int unitTime = 200;
private static void writeFile(int index){

//synchronized (objs[index]) {
locks[index].lock();
String context = Thread.currentThread().getName();
log.debug("Thread"+context+" begin write "+context + " to text"+(index+1));
FileWriter out = null;
try{
File file = new File(files[index]);
out = new FileWriter(file,true);
out.write(context);

out.flush();
out.close();
//
Thread.sleep(unitTime+quan*Integer.parseInt(context));
Thread.sleep(0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
log.debug("Thread"+context+" end write "+context + " to text"+(index+1));
locks[index].unlock();
}
//}
}

private static class MyThread extends Thread{

public MyThread(String name){
super(name);
}
@Override
public void run() {
String name = getName();
for (int i = 0; i < 3; i++) {
if("1".equals(name)){
writeFile(0);
writeFile(1);
writeFile(2);
writeFile(3);
}else if("2".equals(name)){
writeFile(1);
writeFile(0);
writeFile(2);
writeFile(3);
}else if("3".equals(name)){
writeFile(2);
writeFile(0);
writeFile(1);
writeFile(3);
}else if("4".equals(name)){
writeFile(3);
writeFile(0);
writeFile(1);
writeFile(2);
}
}
}
}
public static void main(String[] args) {
new MyThread("1").start();
new MyThread("2").start();
new MyThread("3").start();
new MyThread("4").start();
}
}
分享到:
评论

相关推荐

    unity多开指点

    很多朋友,都不知道多开的情况。我就简单的写了一句。 -projectPath 在目标文件地址尾部里加入即可。

    C#写的MP3播放器

    首先说明,这是本人第一次发布自己的资源,写的说明烂还请大家多多包涵,因为我根本没写过啥需求文档 1.VS2008环境编写,通过WMP 控件实现,功能实现并不完全,因为WMP控件的使用方法不清楚,都是通过看MSD N和查看对象资源...

    将英文单词首字母转为大写输出的C程序

    最近有朋友问过我一道C语言程序题:从键盘输入一句英文,每个单词用空格隔开,用‘#’结束输入,写一个子程序,将英文每个单词首字母转为大写输出,好像百度上没有找到匹配的,今天我写了一个,附上来请大家指点。

    (3.0版本)自己写的struts2+hibernate+spring实例

    呜呜呜.刚才上传了一下.好像出错了.重传一下.如果看到原来的检查一下哦.... 也希望各位高人多多指点啊... 这个版本起名为Struts2Test3.0.以后的日志相关内容就为关于Struts2Test3.0例子的相关内容.

    迷宫小游戏

    这个小游戏是本人根据网上下的一个小游戏改编的.第二关和第三关没画墙(如果要画就调用SerStone(x,y))....希望熟悉MFC朋友能指点一下本人,最好把具体的代码写出来.发给本人,本人不胜感激.我的邮箱是pcx17.126.com.

    C#写的图像处理程序...

    大致是修改alpha值,灰度,还有图片的逆反 最后加了一个Robert算子的边缘检测 需要的朋友多支持...刚开始写这方面的程序所以还希望高手们多指点! 本程序修改 http://download.csdn.net/source/892887

    如何写出让自己满意的代码

    有位朋友在微博上问我这样一个问题:  “近出于学习目的写一个管理系统,越到后边,越觉得自己前边的代码写得烂。前辈,我想让代码写得更好一点,能不能谈谈你的经验,给我指点一下!”  我在回复里刚写了几句,...

    content=”IE=7, IE=9″意思理解

    公司的项目在老总的IE9下无法正常访问了。 哎,苦逼啊。本以为搞定了IE6,7,8,firefox,chrome,safari,opera,就行了。...欢迎各位朋友拍砖,求指点,求进步。 转自http://www.jqueryba.com/77.html

    C#圆面积计算器及源码

    这是玩VC#第一个东西,呵呵, 刚开始玩,希望有朋友在方便的时候指点一下~~~~ 谢谢

    拓展好玩的照片PS处理

    另,有个懂PS的朋友指点更是如虎添翼~~~切忌使用范围过大的关键词,比如“PS教程”,还有“人像美容”,还有“抠图教程大全”。新人的话,字数400以上的教程看都别看,全都是不知道在说什么的术语,一看准晕。你找的...

    ddr3_all_address_test.zip

    前面学习了使用Vivado自带的DDR3示例工程进行DDR3读写测试,利用这个工程又按照应用层和接口层进行了... 在此感谢我的朋友们对我的指点和帮助。因作者水平有限,工程中和文档中难免会有疏漏之处,欢迎读者批评指正。

    广信交易软件

    交易软件 请问一下这样的K线图如何绘制,需要使用什么软件来绘制,请高的朋友们指点一二,非常感谢! k线图 绘制 想学习 可以手绘,有些书上写了的,可以看,期货技术分析这本书

    asp.net仿126邮箱公用界面

    这是本人效仿126邮箱界面在美工的配合下做的一公用界面、基本上适合很多信息管理系统的界面要求。本人的CSS和JAVASCIRPT的功底有限,开发的东西难免会有些BUG或者很肤浅的地方,希望和朋友们一起探讨解决其中的一些...

    pub类库

    在空闲时间,看看两年前的那些零散类文件,开始整理这些类成库,并写了简单的使用和测试范例,放在网上和朋友们共享。 由于早期的平台从windows98和VC6.0,redhat8.0,经历了些变迁,没有太多的时间再一一仔细测试...

    米斗系统VC源代码(20090530).rar

    完成“米斗系统”的一级功能界面设计,二级功能界面因为想在FormView窗口中嵌入PropertySheet而不会实现,希望有高手指点。 目前我们这里有几个人一起搞业余开源程序,第一个程序就是“米斗系统”(并建了QQ群:...

    简单实用的PHP分页类

    自己写的一个比较简单但却很实用的PHP分页类,有兴趣的朋友可以下载,请大家多多指点。

    XT3.9免费下载

    2.由于本人是window内核初学者,为了在内核写更多的代码,以提高本人水平,本人把尽量多的代码写在了内核层 3.最近比较忙,虽然本人在各系统里(2000/xp/2003/vista/2008)经过了仔细的测试,但还是难免有疏忽的地方 ...

    j2me手机游戏_扫雷 代码

    我自己写的扫雷的代码,是手机游戏.感兴趣的朋友可以看一下.我是新手,写的不好不要见笑.游戏里面的计时功能(显示时间)有些问题,可以的话希望高手指点一二,万分感谢

Global site tag (gtag.js) - Google Analytics