- 浏览: 2211390 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
刚刚,在iteye博客里看了一下,散仙的几篇文章好像都挨在一起,不知道这篇文章发了之后,会不会刷屏,实在是不好意思啊。 上班没时间,只能利用下班的时间,留在公司,给大家分享一些有用的技能,也算散仙比较懒吧,散仙实在不愿意晚上回到宿舍之后,再尼玛研究什么技术,我草,那样岂不真的成码农了。
好了,扯淡了几句,下面开始进入正题,本篇散仙要分享的关于NIO里面的文件锁的知识,文件锁的用处,在特定场景下,是非常有用的,那么在开始进行讲解之前,散仙,先借这个知识,来给大家分享一下文件锁在lucene里面发挥的巨大作用。如果想要学习lucene4.x的朋友们,可以参照散仙的博客学习哦。
我们都知道lucene的索引存储,可以放在跟操作系统有关的文件系统里的,而lucene呢,又是决不允许有多个线程同时进行并发写的操作的,那么lucene又不像一些关系型数据库可以采取,锁表,锁行等等一些加锁策略来同步写入操作,那它到底是采用是什么实现的呢?答案毫无疑问,就是采用我们的文件系统加锁策略来实现的,可能用过lucene,solr或es的一些朋友们,有时会发现在我们索引的目录里,莫名其妙的出现了一个以.lock结尾的锁文件,没错,当出现这个文件时,就已经证明你肯定进行过数据的写入操作,
那么可能有些读者还有个疑问,为什么我的锁文件一直都存在啊?我的服务都已经停了呀,它怎么还有呢,我可以不可以把它删除呀?....,别着急,听散仙慢慢的给你介绍下实际情况,大多数时候,我们执行完写入操作后,这个锁文件是会自动删除的,如果它没有自动删除,那么就可能出现如下的几种情况,第一,程序出异常,突然中断了,第二,在写入操作依旧进行的时候我们强制关闭服务了,第三,断电或系统崩溃了。第四,有可能我们写的程序,忘关闭流资源了,造成资源引用依然存在。由以上几种情况,都有可能造成.lock文件没有被lucene自动删除,这时候我们可以手动删除,当然删不删除它,都不影响我们正常使用程序的。你要觉得它留在那里,有损形象,那么你就放心大胆的把它删除吧,当然前提是,不要在有写入操作进行的时候,去删除它。
当然,上面只是散仙分析的一个在lucene中的锁案例,其实这个文件锁,在很多场景都大有用处,因为在某种程度上来说,它可以简洁完美的防止并发。
下面,散仙先给一张,测试用的锁文件目录:
测试,代码如下:
运行时的目录状态,截图如下:
控制台打印效果如下:
最后,我们大家都可以测试一下,让sleep休眠的时间更长一点,然后启动一个程序去访问这个文件,就会报一个异常,该文件已经被占用什么的,现在,我们就可以利用文件锁,来防止写入的并发操作了,至于具体的什么场景,还跟各位大大的业务有关系了。不过在高并发的场景下,建议还是使用一些关系型数据库,或者一些Nosql来解决,做做缓存,负载均衡什么的。总之,一句话,具体场景,具体分析。BOSS们看的都是结果,不会关心你的过程。
好了,今天,散仙就先分享到这里了,感谢各位看官,能够坚持看到最后。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
我前面说的话,就早已经做过测试了,在这里我们是针对防止并发来说的,并没有去细化到到底是那种锁来实现的,我们理解的角度可能不太一样,感谢,细心发言交流。
我已经无语了。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
我前面说的话,就早已经做过测试了,在这里我们是针对防止并发来说的,并没有去细化到到底是那种锁来实现的,我们理解的角度可能不太一样,感谢,细心发言交流。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
是用来防不同的JVM之间或者JVM和操作系统其他进程之间的锁。
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
是用来防不同的JVM之间或者JVM和操作系统其他进程之间的锁。
嗯,使用try,finally来释放资源,比较安全,散仙出于演示,就没加,正式环境中大家一定要养成良好的习惯!。谢谢指正!
呵呵,有空一定写几篇,一起学习啊,加油!
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
好了,扯淡了几句,下面开始进入正题,本篇散仙要分享的关于NIO里面的文件锁的知识,文件锁的用处,在特定场景下,是非常有用的,那么在开始进行讲解之前,散仙,先借这个知识,来给大家分享一下文件锁在lucene里面发挥的巨大作用。如果想要学习lucene4.x的朋友们,可以参照散仙的博客学习哦。
我们都知道lucene的索引存储,可以放在跟操作系统有关的文件系统里的,而lucene呢,又是决不允许有多个线程同时进行并发写的操作的,那么lucene又不像一些关系型数据库可以采取,锁表,锁行等等一些加锁策略来同步写入操作,那它到底是采用是什么实现的呢?答案毫无疑问,就是采用我们的文件系统加锁策略来实现的,可能用过lucene,solr或es的一些朋友们,有时会发现在我们索引的目录里,莫名其妙的出现了一个以.lock结尾的锁文件,没错,当出现这个文件时,就已经证明你肯定进行过数据的写入操作,
那么可能有些读者还有个疑问,为什么我的锁文件一直都存在啊?我的服务都已经停了呀,它怎么还有呢,我可以不可以把它删除呀?....,别着急,听散仙慢慢的给你介绍下实际情况,大多数时候,我们执行完写入操作后,这个锁文件是会自动删除的,如果它没有自动删除,那么就可能出现如下的几种情况,第一,程序出异常,突然中断了,第二,在写入操作依旧进行的时候我们强制关闭服务了,第三,断电或系统崩溃了。第四,有可能我们写的程序,忘关闭流资源了,造成资源引用依然存在。由以上几种情况,都有可能造成.lock文件没有被lucene自动删除,这时候我们可以手动删除,当然删不删除它,都不影响我们正常使用程序的。你要觉得它留在那里,有损形象,那么你就放心大胆的把它删除吧,当然前提是,不要在有写入操作进行的时候,去删除它。
当然,上面只是散仙分析的一个在lucene中的锁案例,其实这个文件锁,在很多场景都大有用处,因为在某种程度上来说,它可以简洁完美的防止并发。
下面,散仙先给一张,测试用的锁文件目录:

测试,代码如下:
package com.filelock; import java.io.File; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; /*** * * @author 秦东亮 * 测试文件锁的功能 * * **/ public class MyLock { public static void main2(String[] args)throws Exception { File f=new File("D://6//mylock.lock"); f.delete(); } public static void main(String[] args)throws Exception { // List<String> s=Files.readAllLines(Paths.get("D://6//my.txt"), StandardCharsets.UTF_8); //System.out.println(s.size()); //使用FileOutputStream获取channel FileOutputStream f=new FileOutputStream(new File("D://6//mylock.lock")); FileChannel channel=f.getChannel(); //非阻塞加锁 FileLock lock=channel.tryLock(); //阻塞加锁 // FileLock lock=channel.lock(); if(lock==null){ System.out.println("改程序已经被占用....."); System.out.println("阻塞中....."); }else{ System.out.println("开始访问......."); Thread.sleep(5000);//5秒后进行访问 if(lock!=null){ List<String> s=Files.readAllLines(Paths.get("D://6//my.txt"), StandardCharsets.UTF_8); //读取文件,打印内容 for(String ss:s){ System.out.println(ss); } lock.release();//释放锁 lock.close();//关闭资源 f.close();//关闭流资源 Files.delete(Paths.get("D://6//mylock.lock")); System.out.println("访问完毕删除锁文件"); } } } }
运行时的目录状态,截图如下:

控制台打印效果如下:
开始访问....... 有经验 有关系 有技术 有资本 oh了,你可以去创业了! 访问完毕删除锁文件
最后,我们大家都可以测试一下,让sleep休眠的时间更长一点,然后启动一个程序去访问这个文件,就会报一个异常,该文件已经被占用什么的,现在,我们就可以利用文件锁,来防止写入的并发操作了,至于具体的什么场景,还跟各位大大的业务有关系了。不过在高并发的场景下,建议还是使用一些关系型数据库,或者一些Nosql来解决,做做缓存,负载均衡什么的。总之,一句话,具体场景,具体分析。BOSS们看的都是结果,不会关心你的过程。
好了,今天,散仙就先分享到这里了,感谢各位看官,能够坚持看到最后。
评论
13 楼
kongxuan
2013-11-28
qindongliang1922 写道
runshine 写道
qindongliang1922 写道
runshine 写道
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
我前面说的话,就早已经做过测试了,在这里我们是针对防止并发来说的,并没有去细化到到底是那种锁来实现的,我们理解的角度可能不太一样,感谢,细心发言交流。
我已经无语了。
12 楼
qindongliang1922
2013-11-27
runshine 写道
qindongliang1922 写道
runshine 写道
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
我前面说的话,就早已经做过测试了,在这里我们是针对防止并发来说的,并没有去细化到到底是那种锁来实现的,我们理解的角度可能不太一样,感谢,细心发言交流。
11 楼
runshine
2013-11-27
qindongliang1922 写道
runshine 写道
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
线程的互斥锁是线程的互斥锁,文件锁是文件锁.进程内部做文件的线程级排他访问由程序自身线程同步控制,文件锁是OS提供的行为用来在进程间提供文件排他访问.
你再开个线程进行文件写入就明白了...
10 楼
qindongliang1922
2013-11-27
kongxuan 写道
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
是用来防不同的JVM之间或者JVM和操作系统其他进程之间的锁。
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
9 楼
qindongliang1922
2013-11-27
runshine 写道
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
同一个JVM虚拟机里面,如果有多个线程去并发访问的话,只有先得到锁的线程可以访问,后来的线程,因为锁不能重叠的原因,会抛异常,如果不做处理的话,程序终止运行,所以从某个角度上来说,文件锁也是可以防止同一个JVM里面的线程并发的,可能我们理解的角度不太一样。不过仍然感谢各位朋友,发言交流。
8 楼
runshine
2013-11-27
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
那位兄弟是对的
你可以看看FileChannel的lock或tryLock方法JDK API文档中描述的最后一句"文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。"
文件锁其实借助的是OS提供的机制,锁的粒度是进程级别的,存在的意义是协调多进程对文件的同时访问.
7 楼
kongxuan
2013-11-27
qindongliang1922 写道
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
是用来防不同的JVM之间或者JVM和操作系统其他进程之间的锁。
6 楼
qindongliang1922
2013-11-27
onthewanying 写道
利用中午休息时间一口气把四篇都看了,写的挺好的,提个小建议,使用锁的写法不严谨,应改成 try {} finally{} 写法
嗯,使用try,finally来释放资源,比较安全,散仙出于演示,就没加,正式环境中大家一定要养成良好的习惯!。谢谢指正!
5 楼
onthewanying
2013-11-27
利用中午休息时间一口气把四篇都看了,写的挺好的,提个小建议,使用锁的写法不严谨,应改成 try {} finally{} 写法
4 楼
qindongliang1922
2013-11-27
manong_java 写道
不错 学习了。
兄弟什么时候讲讲java.util.concurrent;啊
兄弟什么时候讲讲java.util.concurrent;啊
呵呵,有空一定写几篇,一起学习啊,加油!
3 楼
manong_java
2013-11-27
不错 学习了。
兄弟什么时候讲讲java.util.concurrent;啊
兄弟什么时候讲讲java.util.concurrent;啊
2 楼
qindongliang1922
2013-11-27
kongxuan 写道
文件锁是不能防住同一个JVM里面的线程的。
这位兄弟,说话得拿出根据,请举例说明,如果不能防止并发,那这锁存在的意义是什么?还请阁下赐教!
1 楼
kongxuan
2013-11-27
文件锁是不能防住同一个JVM里面的线程的。
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1655### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1296如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1196我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2266高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2162将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1723在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1115Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6100之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 1015长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2122计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3420### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1139# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3338# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1147# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1503# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1083### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1420# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1410# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 768### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1543前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip