`

为什么要在多线程中进行数据同步

阅读更多
package com.mhm.test;

public class Test7 extends Thread {
	public static int n = 0;

	public void run() {
		int m = n;
		yield();
		m++;
		n = m;
	}

	public static void main(String[] args) throws Exception {
		Test7 myThread = new Test7();
		Thread threads[] = new Thread[100];
		for (int i = 0; i < threads.length; i++)
			threads[i] = new Thread(myThread);
		for (int i = 0; i < threads.length; i++)
			threads[i].start();
		for (int i = 0; i < threads.length; i++)
			threads[i].join();
		System.out.println("n = " + Test7.n);
	}
}

 当这段代码执行完后,结果可能不是100,因为出现了脏数据

解决办法是在run() 前加synchronized

转载于http://java.chinaitlab.com/line/779590.html

 

在23种设计模式中的单件(Singleton)模式如果按传统的方法设计,也是线程不安全的,下面的代码是一个线程不安全的单件模式。

 

class Singleton
{
    private static Singleton sample;

    private Singleton()
    {
    }
    public static Singleton getInstance()
    {
        if (sample == null)
        {
            Thread.yield(); // 为了放大Singleton模式的线程不安全性
            sample = new Singleton();
        }
        return sample;
    }
}
public class MyThread extends Thread
{
    public void run()
    {
        Singleton singleton = Singleton.getInstance();
        System.out.println(singleton.hashCode());
    }
    public static void main(String[] args)
    {
        Thread threads[] = new Thread[5];
        for (int i = 0; i < threads.length; i++)
            threads[i] = new MyThread();
        for (int i = 0; i < threads.length; i++)
            threads[i].start();
    }
}

要想使上面的单例模式线程安全,只要在静态方法getInstance()前加上
synchronized就可以了

分享到:
评论

相关推荐

    多线程数据同步

    标题"多线程数据同步"直指这一核心问题,而描述则具体提到了使用临界区对象作为解决方案之一。 线程同步是为了防止多个线程同时访问共享资源,导致数据的混乱。在Windows操作系统中,临界区对象是一种轻量级的同步...

    多线程同步大量数据转录的多线程和同步

    在实现多线程数据转录的过程中,队列(`Queue&lt;T&gt;`)被用作数据结构来存储待处理的数据。队列是一种先进先出(FIFO)的数据结构,非常适合用于处理多线程环境中的任务调度。写入线程将数据添加到队列的尾部,而读取...

    3种多线程实现同步方法

    然而,多线程也带来了数据同步的问题,因为多个线程可能同时访问共享资源,如果不加以控制,就可能导致数据不一致或引发错误。本篇文章将深入探讨三种在C++中实现多线程同步的方法:事件对象、关键代码段和互斥对象...

    在Delphi中利用多线程实现数据采集的方法.doc

    通过以上分析可以看出,在Delphi中使用多线程技术进行数据采集不仅能够有效提升数据处理的效率,还能确保程序的稳定性和响应性。对于涉及大量数据处理的应用场景来说,这是一种非常实用且高效的技术方案。开发者可以...

    Powerbuilder中实现多线程同步查询数据 源程序

    在PowerBuilder中实现多线程同步查询数据是一项高级技术,涉及到并发编程和数据库访问的优化。PowerBuilder是一款强大的第四代编程语言(4GL),尤其适用于开发数据库应用系统。本源程序的目标是提高应用程序的性能...

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。这个场景通常涉及到性能优化和资源管理,以确保系统稳定性和数据一致性。下面将详细阐述多线程导入Excel数据的核心知识点。...

    c++实现多线程同步

    本文将深入探讨如何在C++中实现多线程以及如何利用信号量进行线程同步。 首先,我们需要理解什么是多线程。在单线程程序中,执行流是线性的,而多线程允许程序同时执行多个不同的任务。这通常会提高程序的响应性和...

    Delphi多线程同步的例子

    本文将深入探讨Delphi中的多线程和线程同步,并以"SortThreads"和"delphi-thread-gui"这两个示例项目为例,讲解如何在实践中应用这些概念。 1. **多线程**:多线程允许应用程序同时执行多个独立的任务,提高程序的...

    某电信项目多线程同步数据实例

    在IT行业中,尤其是在大型系统开发中,多线程同步数据是一个关键的技术环节,尤其是在处理大量实时数据的场景,如电信项目。"某电信项目多线程同步数据实例"的标题揭示了一个具体的应用案例,它表明在该电信项目中,...

    解决多线程编程中的同步互斥问题

    使用关键段可以有效地解决多线程编程中的同步互斥问题,确保了在多线程环境中对共享资源的安全访问。但是需要注意的是,关键段仅能解决单个CPU核心上的互斥访问问题,对于多处理器或多核心环境下的同步问题可能需要...

    VC++多线程同步基本示例

    本示例着重讲解了VC++中的多线程同步,这是多线程编程中确保数据安全和正确性的重要概念。我们将深入探讨临界区、互斥量、事件和信号量这四种多线程同步机制。 1. **临界区(Critical Section)**:临界区是多线程...

    线程同步及数据结构

    线程同步是指在多线程环境中,控制多个线程对共享资源的访问,以避免数据竞争和其他并发问题,确保程序的正确性和一致性。而数据结构则是组织和存储数据的方式,它直接影响到算法的效率和程序的性能。 线程同步方法...

    多线程示例,同时同步到进度条

    标题“多线程示例,同时同步到进度条”表明我们要探讨的是如何在多个线程并行运行的同时,同步更新一个进度条来显示任务的完成状态。这在大型数据处理、网络下载或复杂计算等场景中非常常见,它可以帮助用户了解任务...

    易语言多线程传递自定义数据(免加延时方法)

    本主题主要探讨的是在易语言中如何实现多线程并传递自定义数据,而且无需额外添加延时方法。 易语言的多线程功能主要通过“创建线程”和“结束线程”等指令来实现。创建线程时,通常会有一个主线程(默认运行的程序...

    多线程临界段同步演示1

    在计算机编程领域,多线程是一种让程序同时执行多个...在这个"多线程临界段同步演示1"中,我们可以学习到如何在不使用MFC类的情况下,利用Windows API实现线程间的同步,这对于提升多线程编程技能是非常有价值的实践。

    linux上实现多进程和多线程实现同步互斥(源代码)

    多线程则是在一个进程中创建多个执行流,它们共享同一块内存空间,资源利用率高,但数据同步和互斥问题更复杂。在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束。线程间的同步互斥...

    C#的多线程示例;几个多线程之间的互斥,同步;WPF主界面INVOKE

    本文将深入探讨C#中的多线程机制,包括线程互斥与同步,以及如何在WPF主界面中安全地更新UI。 首先,让我们理解什么是多线程。多线程是指一个应用程序内同时运行多个独立的执行线程。在C#中,可以使用`System....

    qt多线程实例-数据处理和UI界面显示

    在Qt框架中,多线程技术是实现高效并发处理的关键,尤其在数据处理和用户界面(UI)更新方面。这个实例“qt多线程实例-数据处理和UI界面显示”很可能是为了展示如何在不阻塞UI的情况下进行繁重的数据处理任务。 在...

    Springboot Druid多数据源 多线程

    本项目中的"sync_middleware"可能是指同步中间件或者同步服务,它可能是负责协调不同数据库间数据同步的组件。这样的设计可能涉及到异步处理、消息队列(如RabbitMQ或Kafka)或者数据库触发器,以确保在MySQL和...

    多线程的批量线程同步解决方案

    总结,多线程批量线程同步解决方案涵盖了多种技术,从基本的互斥量到复杂的线程池,都是为了在多线程环境中保证数据一致性、提高程序效率。理解并掌握这些概念和技术对于开发高效、可靠的并发应用至关重要。

Global site tag (gtag.js) - Google Analytics