java - 在 Java 并行/多线程中创建现有代码

标签 java multithreading thread-safety

我有一个非常简单的爬虫。我想让我当前的代码在几个线程中运行。你能给我一些教程或文章来帮助我完成这个测试吗?

我最初是一名 .Net 开发人员,在 .Net 中,我在多线程中运行代码没有任何问题,但不幸的是,我对 Java 中的线程一无所知。

我的爬虫是一个命令行软件,所以不用担心 GUI。

提前谢谢你。

最佳答案

Java 通过Thread 类来实现多线程。使现有代码成为多线程的最常见方法之一是使用 Runnable 接口(interface)定义您希望在线程启动时调用的内容,然后启动它。

public class SomeFunctions
{
  public static void FunctionA() {}
  public static void FunctionB() {}
  public static void FunctionC() {}
}

// ...
Thread t1 = new Thread(new Runnable() {
   public void run() {
      SomeFunctions.FunctionA();
   }
});
t1.start();

// (rinse and repeat for the other functions)

干编码,但它至少应该传达一般概念。当然,一旦进入多线程领域,就会遇到并发问题,需要确保所有内容都适当同步等,但任何语言都会遇到这些问题。

如果您担心同步问题,可以使用一些工具。最简单的是 Java 中内置的递归互斥功能,即“synchronized”关键字。更经典的手段也可以通过java.util.concurrent和java.util.concurrent.locks包中的各种类,比如Semaphore和ReadWriteLock

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html http://download.oracle.com/javase/6/docs/api/java/util/concurrent/locks/package-summary.html

关于java - 在 Java 并行/多线程中创建现有代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005137/

相关文章:

java - 从Evaluation.predictions() Weka-api java中保存在快速 vector 中的结果的含义是什么

java - 如何通过使用 JAVA 中的 pem 文件连接到服务器来跟踪远程服务器中的后端日志

java - 如何将 .war 文件与 JDBC jar 一起部署到 tomcat7 中?

c# - 0MQ : How to use ZeroMQ in a threadsafe manner?

java - 如果我们通过一个线程添加并通过另一个线程删除,我们是否需要同步?

java - Spark 应用程序 - Java.lang.OutOfMemoryError : Java heap space

Perl:终止线程并获得迄今为止最好的结果

Java多线程 - 一个线程在另一个线程之前两次进入临界区

java - 如何使用 JavaFX 实现多线程

Java - map 允许空值/键而不是线程安全的