0 0

Java多线程对耗时方法的同步问题25

   各位大牛,小弟现在遇到一个问题,就是使用多线程调用一个耗时的方法,如何同步?代码大体如下:
  
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10); 
		final BusinessService service = new BusinessService(); 
		for(int i = 0; i < 10; i++)
		{
			scheduler.scheduleWithFixedDelay(new Runnable(){
				@Override
				public void run() {
					service.handleBusiness();
				}
				
			}, i, 5, TimeUnit.MINUTES);
		}

   


这个时候,如果在handleBusiness()方法上加上
synchronized
,其它线程就进不了这个方法,因为这个方法需要耗时5分钟左右,大家帮忙想想有啥好的解决办法,能让所有线程不等待,就可以调用这个方法又保持原子操作
2013年1月13日 19:54

12个答案 按时间排序 按投票排序

1 0

handleBusiness()写成线程安全的就好了啊。。

2013年1月13日 20:25
0 0

handleBusiness这个方法能做到线程安全就不需要synchronize,做不到就必须用synchronize或再深入handleBusiness同步里面具体的某个操作。就像servlet一样,doget和dopost必须保证线程安全,如果不能保证,就要在里面做同步。

2013年1月15日 11:05
0 0

你想这个方法保持原子操作,就说明你这个方法必须是线程安全的。
如果想其他线程也能进入这个方法,则可以将锁的粒度控制的小些

2013年1月15日 09:42
0 0

LZ 是不是就想顺序执行这几个service吧,我觉得没有这么复杂吧:
把for循环放到线程中执行就行了:

BusinessService service = new BusinessService();
new Thread()
{
    public void run()
    {
        //service 连续执行10次
        for (int i = 0; i<10; i++)
        {
            service.handleService();
        }
    }
}.start()

2013年1月15日 09:11
0 0

你这个需求本身就是矛盾的,结构设计肯定存在不合理的地方,既然你在handleBusiness();方法加上synchrozied就保证了多个线程会逐个调用该方法,那么多线程的意义何在?还会白白增加开启线程、调度线程的开销。如果实时性不高的话可以考虑异步处理请求

2013年1月14日 23:52
0 0

引用
handleBusiness()写成线程安全的就好了啊。。

好像还真只有这个方法

2013年1月14日 14:21
0 0

你的需求跟做法是对立的,如果handleBusiness方法处理的东东不影响其他的,把synchronized去掉吧

2013年1月14日 13:49
0 0

具体要看handleBusiness实现了什么样的业务了。到底并发的东西是什么?方便把代码贴出来么

2013年1月14日 12:32
0 0

建议 : 1. 方法上枷锁 2.在service这个类中 添加一个判断变量
    run方法执行时 先判断这个变量 是否有效 然后决定是否执行handleBussiness方法 执行 完bussiness方法后 将那个变量在变成 有效

2013年1月14日 10:21
0 0

可以使用wait-free算法来实现,从而避免使用synchronized关键字。可以参考一下类似于AtomicInteger这样的类,比如incrementAndGet()方法。

2013年1月14日 10:18
0 0

想保持原子性,只能加synchronized同步吧。

2013年1月14日 09:55
0 0

你要保证 service.handleBusiness();   这个方法的原子性 。又要很多线程瑶掉这个方法。这个本身就是对立的

建议
   把这个方法 在for循环外面写成单线程慢慢处理就行。

2013年1月14日 09:43

相关推荐

    java多线程进度条

    总之,实现Java多线程进度条涉及线程同步、共享数据更新以及UI更新的协调。理解这些核心概念,并根据具体需求选择合适的方法,是构建高效、用户友好进度条的关键。在ProgressTest这个示例项目中,你可能会找到更多...

    JAVA单线程多线程

    单线程模型简化了程序设计,降低了程序复杂度,使得开发者可以更专注于业务逻辑的实现,而无需过多考虑多线程间的同步问题。 单线程的优势主要体现在以下几个方面: 1. **简化程序设计**:由于无需处理多线程间的...

    java多线程进度条实例

    在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了效率。本实例将探讨如何利用Java实现一个具有进度条显示功能的多线程应用。进度条通常用于可视化地表示某个任务的完成程度,这对于长...

    Java多线程Executors批量执行数据实现限流

    Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...

    Java多线程实现异步调用实例

    总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...

    java多线程.pdf

    ### Java多线程知识点详解 #### 一、Java多线程概述 **Java多线程**是指在Java程序中能够同时执行多个线程的技术。这种技术使得程序可以在多个任务之间并发执行,从而提高了程序的效率和资源利用率。本文将根据...

    详细剖析JAVA多线程案例教学

    ### JAVA多线程案例教学详析 #### 一、引言 随着计算机技术的发展,多核处理器已经成为标准配置,为了充分利用硬件资源,提高程序的执行效率,多线程编程成为了现代软件开发中不可或缺的一部分。Java作为一种广泛...

    java多线程的使用和介绍

    ### Java多线程的使用与介绍 #### 什么是多线程? 多线程是指程序能够同时执行多个线程的能力。每个线程都是一个轻量级的进程,可以在单个程序中独立运行,共享该程序的资源。在Java中,多线程是通过`java.lang....

    Java分布式应用学习笔记05多线程下的并发同步器

    ### Java分布式应用学习笔记05多线程下的并发同步器 #### 1. 前言 在现代软件开发中,特别是在分布式系统和高性能计算领域,有效地管理多线程之间的协同工作至关重要。Java语言提供了丰富的工具和API来帮助开发者...

    java多线程并发

    ### Java多线程并发知识点详解 #### 一、Java多线程并发简介 在现代软件开发中,特别是在Java这样的主流编程语言中,多线程并发技术是提高程序执行效率、优化资源利用的关键手段之一。本篇文章将深入探讨Java中的...

    java多线程学习资料

    ### Java多线程学习资料知识点解析 #### 一、引言 Java作为一种广泛使用的编程语言,在并发编程领域具有独特的优势。多线程是Java中实现并发处理的核心技术之一,能够显著提升程序的性能和响应性。本文将深入探讨...

    JAVA多线程聊天工具

    "JAVA多线程聊天工具"是一个基于Java实现的简单应用,它利用了多线程的概念来创建一个实时、互动的聊天环境。在这个聊天工具中,每个用户都可以在不同的线程中运行,允许他们同时进行交谈,从而提供了一个并行的交流...

    Java多线程

    Java多线程知识点梳理: 1. Java线程基础知识 - 线程是程序中独立的、并发的执行路径。每个线程都有自己的堆栈、程序计数器和局部变量,但与分隔的进程不同,线程之间的隔离程度较小,它们共享内存、文件句柄等...

    java单线程多线程clientserver

    Java多线程则是为了解决这个问题而引入的概念。通过创建多个线程,程序可以在同一时间执行多个任务,提高了CPU的利用率和程序的响应速度。多线程可以分为并发和并行两种。并发是在单核CPU中,通过快速切换线程执行来...

    经典java多线程资料

    ### 经典Java多线程资料知识点解析 #### 一、基本原理 ...以上内容涵盖了关于Java多线程的基本概念、线程的创建与启动方式以及线程的生命周期等方面的知识点,希望能对学习Java多线程技术的朋友有所帮助。

    java多线程详解

    ### Java多线程详解:深度探索Java线程机制 #### 知识点一:线程与进程的区别 在深入探讨Java多线程之前,我们首先需要理解线程与进程的基本概念及其区别。进程是资源分配的基本单位,拥有独立的内存空间,而线程...

    java多线程断点续传下载

    Java多线程断点续传下载是一个复杂但实用的技术,尤其在处理大文件或网络不稳定时,能够提高用户体验并优化资源利用。以下是对这个主题的详细解析: **1. Java多线程** Java多线程是指在一个Java应用程序中同时执行...

    Java多线程编程环境中单例模式的实现

    在Java多线程编程环境中实现单例模式时,需要格外注意线程安全问题。通过对惰性加载机制的理解以及对不同解决方案的探讨,我们可以选择最适合项目需求的方法来实现高效的单例模式。无论是使用同步方法还是双重检查...

    Java多线程编程

    ### Java多线程编程知识点详解 #### 一、线程基础概述 - **定义与特点:** - **线程**是一种比进程更细粒度的执行单元,它允许在一个进程中并发执行多个任务。 - **轻量级进程**:线程有时被称为轻量级进程,...

Global site tag (gtag.js) - Google Analytics