为了账号安全,请及时绑定邮箱和手机立即绑定

Java多线程方法没有被执行

Java多线程方法没有被执行

四季花海 2018-10-11 10:10:05
开启了一个线程池ExecutorService threadService=Executors.newFixedThreadPool(3);threadService.submit(new task(Queue));threadService.submit(new task(Queue));threadService.submit(new task(Queue));线程池中放入三个相同的线程,三个线程从同一个阻塞队列拿数据写到文件中。线程的Run()方法,调用了一个内部方法public run(){  file=Queue.take();  //计数点1:数据取出来(取出来的数据个数)  writetoFile(file);  //计数点2:写完文件的个数} private writetoFile(){  //计数点3:进入写函数的个数}现在队列中放1200个数据,则会发生数据 丢失的情况,因此使用下面的方式对关键点进行计数输出private static int cout=0;发现计数点1与1200吻合。计数点2总比计数点3多1,则说明剩下的次数均没有进入doSomething()函数,其中一次的数据如下:计数点1:1200   //计数点1的数据很稳定(说明:数据都从阻塞队列中拿出来了)计数点2:1180  //计数点2,3的数据每次都有浮动,但不是1200,总有丢失的情况,说明写函数不是每一次都执行了计数点3:1181 可是顺序结构的代码,为什么会平白无故的没有进入函数呢,就想到了可能是线程的原因 ,还请大佬们指点一下。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

因FileLock的锁造成

查看完整回答
反对 回复 2018-10-31
?
撒科打诨

TA贡献1934条经验 获得超2个赞

你的count是对run方法执行次数进行统计的吧,你private static volatile int cout=0; 这样试试

查看完整回答
反对 回复 2018-10-31
  • 2 回答
  • 0 关注
  • 844 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信