当前位置: 首页 > 面试题库 >

使用Java并行/多线程制作现有代码

葛宪
2023-03-14
问题内容

我有一个非常简单的搜寻器。我想使当前代码在几个线程中运行。您能否提供一些教程或文章来帮助我完成这项测试?

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

我的搜寻器是一种命令行软件,因此不必担心GUI。

先感谢您。


问题答案:

Java通过Thread类进行多线程处理。使现有代码成为多线程的最常见方法之一是使用Runnable接口定义要在线程启动时调用的内容,然后将其启动。

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的HttpClient实现多线程并发,包括了使用java的HttpClient实现多线程并发的使用技巧和注意事项,需要的朋友参考一下 说明:以下的代码基于httpclient4.5.2实现。 我们要使用java的HttpClient实现get请求抓取网页是一件比较容易实现的工作: 要多线程执行get请求时上面的方法也堪用。不过这种多线程请求是基于在每次调用get方法时创建

  • sellerDataList的大小=1000,sellerNames的大小=5000。 现在我想创建10个线程,并为每个线程分配相等的任务块。对于第一个sellerDataList,第一个线程应该获得500个名称的地址,第二个线程应该获得下一个500个名称的地址,依此类推。 完成这项工作的最佳方法是什么?

  • 并发是什么?引用Rob Pike的经典描述: 并发是同一时间应对多件事情的能力 其实在我们身边就有很多并发的事情,比如一边上课,一边发短信;一边给小孩喂奶,一边看电视,只要你细心留意,就会发现许多类似的事。相应地,在软件的世界里,我们也会发现这样的事,比如一边写博客,一边听音乐;一边看网页,一边下载软件等等。显而易见这样会节约不少时间,干更多的事。然而一开始计算机系统并不能同时处理两件事,这明显满

  • 并行 理论上并行和语言并没有什么关系,所以在理论上的并行方式,都可以尝试用Rust来实现。本小节不会详细全面地介绍具体的并行理论知识,只介绍用Rust如何来实现相关的并行模式。 Rust的一大特点是,可以保证“线程安全”。而且,没有性能损失。更有意思的是,Rust编译器实际上只有Send Sync等基本抽象,而对“线程” “锁” “同步” 等基本的并行相关的概念一无所知,这些概念都是由库实现的。这

  • 本章讲解 Rust 中,并发,并行,多线程编程的相关知识。

  • 我正在使用番石榴事件总线。我有一个类似服务器的对象,它应该一直在运行,监听要发布给b用户的事件。所以在junit测试中(MyObject是被测试类),我在它自己的线程中创建它来模拟这一点并防止阻塞: 一切都很好,myObject是在它自己的线程Thread1中创建的。然后,我在测试中向事件总线发布一个事件: 奇怪的是,我发现MyObject类中的订阅方法的所有操作/日志记录都再次在主线程中执行。m