Tag: 同步

使用Apache Lucene索引MySQL数据库,并使它们保持同步

在MySQL中添加新项目时,它必须也由Lucene编制索引。 当从MySQL中删除现有项时,它也必须从Lucene的索引中删除。 我们的想法是编写一个脚本,通过调度程序每隔x分钟调用一次(例如CRON任务)。 这是一种保持MySQL和Lucene同步的方法。 直到我还管理的内容: 对于MySQL中每个新添加的项目,Lucene也将其编入索引。 对于MySQL中每个已经添加的项目,Lucene不会重新索引它(没有重复的项目)。 这是我要求你帮助管理的一点: 对于之前已经从MySQL中删除的每个项目,Lucene也应该取消索引。 这是我使用的代码,它试图索引MySQL表tag (id [PK] | name) : public static void main(String[] args) throws Exception { Class.forName(“com.mysql.jdbc.Driver”).newInstance(); Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost/mydb”, “root”, “”); StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer); IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), config); String query = “SELECT id, name FROM tag”; […]

Java相当于.Net的AutoResetEvent?

我应该使用什么来获得与Java中的AutoResetEvent等效的语义? (请参阅ManualResetEvent的此问题 )。

在java中实现自己的阻塞队列

我知道这个问题之前已被多次询问和回答,但我无法弄清楚互联网上的例子,比如这个或那个 。 这两个解决方案都检查阻塞队列的数组/队列/链表的空白,以便在get()方法中通知put()方法中的所有等待线程,反之亦然。 第二个链接中的评论强调了这种情况,并提到这不是必要的。 所以问题是; 检查队列是否为空,对我来说似乎有点奇怪 完全通知所有等待的线程。 有任何想法吗? 提前致谢。

为什么在Java中调用信号后调用解锁?

在Java中,为什么在调用signal( notFull.signal()和notFull.signal() )之后解锁被调用( notFull.signal() )? 顺序在pthread中反转 。 那么为什么会有区别呢? 谢谢。 从多处理器编程的艺术, 1 class LockedQueue { 2 final Lock lock = new ReentrantLock(); 3 final Condition notFull = lock.newCondition(); 4 final Condition notEmpty = lock.newCondition(); 5 final T[] items; 6 int tail, head, count; 7 public LockedQueue(int capacity) { 8 items = (T[])new Object[capacity]; 9 } 10 […]

java变量本身是否安全? 更新变量时?

假设我有两个线程更新一个对象,一个线程从该对象读取而没有同步。 显然,这是运行条件。 但是,我想知道变量本身是否只能部分写入。 public class CommonObject extends Object { static int memberVar=-1; } public class Input1Thread extends Thread { public void run() { while(true) CommonObject.memberVar = 1 } } public class Input2Thread extends Thread { public void run() { while(true) CommonObject.memberVar = 2; } } public class OutputThread extends Thread { public void run() { […]

在java中以循环方式运行线程

我是java中multithreading和同步的新手。 我正在尝试实现一个任务,其中我给了5个文件,每个文件将由一个特定的线程读取。 每个线程都应从文件中读取一行,然后将执行转发到下一个线程,依此类推。 当所有5个线程读取第一行时,再次从线程1开始运行第一行。 文件1中的2,依此类推。 Thread ReadThread1 = new Thread(new ReadFile(0)); Thread ReadThread2 = new Thread(new ReadFile(1)); Thread ReadThread3 = new Thread(new ReadFile(2)); Thread ReadThread4 = new Thread(new ReadFile(3)); Thread ReadThread5 = new Thread(new ReadFile(4)); // starting all the threads ReadThread1.start(); ReadThread2.start(); ReadThread3.start(); ReadThread4.start(); ReadThread5.start(); 在ReadFile(实现Runnable,在run方法中,我试图在bufferreader对象上进行同步)。 BufferedReader br = null; String sCurrentLine; String filename=”Source/”+files[fileno]; br […]

Java等待和notifyAll:IllegalMonitorStateException

我是Java新手(和RoR开发人员)。 我有一个简单的程序。 球是共享的球员。 球应该传递给随机球员。 好的,这里是代码: class Ball { private int currentPlayer; public void setCurrentPlayer( int currentPlayer, int fromWho ) { this.currentPlayer = currentPlayer; System.out.println( “Ball:setCurrentPlayer ” + fromWho + ” —> ” + currentPlayer ); } public int getCurrentPlayer() { return currentPlayer; } } class Player implements Runnable { private int myID; private Ball ball; […]

synchronized块没有锁定对象引用

class Demo { void demo() { System.out.println(“Inside demo of “+Thread.currentThread().getName()); try { Thread.sleep(1000000); } catch(InterruptedException exc) { System.out.println(Thread.currentThread().getName()+” interrupted”); } } } class MyThread1 implements Runnable { Thread thread; Demo d; MyThread1(String name, Demo ob) { d = ob; thread = new Thread(this, name); thread.start(); } @Override public void run() { System.out.println(thread.getName()+” starting”); synchronized(d) { […]

我是否需要在Java中同步对不可变类型的访问?

假设我有这个课程: class Zoo { protected String bearName; protected Double trainerSalary; protected Integer monkeyCount; } 一个线程可以写入这些字段,而另一个线程可以读取它们,而无需synchronized访问Zoo对象吗? 注意:这些值可以彼此分开处理,因此在trainerSalary更改trainerSalary并不重要。 编辑 : 只是为了澄清,这些领域是可变的 ; 只有他们引用的对象是不可变的 。

为什么ArrayList和HashMap等类不同步?

我正在更新一个旧项目,我想知道是否应该在IDE中删除一些标记为“过时”的对象。 有问题的对象是Vector和Hashtable。 我做了一些研究,似乎这些对象的新对应物 – ArrayList和HashMap – 基本相同,只是没有同步。 我的问题是,为什么要进行切换? 我不是只是从我的应用程序中取走一点安全性以换取少量速度吗? 看起来这不是一个巨大的决定,但我想我会在做出决定之前看看是否值得花时间。 谢谢!