`
xiaoliang330
  • 浏览: 115318 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于线程----线程间的数据共享

阅读更多
   当多个线程的执行代码来自同一个类的run方法,既称他们共享相同的代码;当共享访问相同的对象时,既他们共享相同的数据。



演示代码

Java代码
import java.lang.*;  
 
public class Demo  
{  
    public static void main(String[] args)  
    {  
        MyThread thread=new MyThread();  
        new Thread(thread,"A").start();  
        new Thread(thread,"B").start();  
        new Thread(thread,"C").start();  
    }  
}  
 
class MyThread implements Runnable  
{  
    private int sleepTime;  
    public MyThread()  
    {  
        sleepTime=(int)(Math.random()*6000);  //获得随机休眠毫秒数  
    }  
      
    public void run()  
    {  
        try 
        {  
            System.out.println(Thread.currentThread().getName()+"要休息"+sleepTime+"ms");  
            Thread.sleep(sleepTime);  
            System.out.println(Thread.currentThread().getName()+"睡醒了。");  
        }  
        catch(Exception e)  
        {  
            System.out.println(Thread.currentThread().getName()+"被吵醒了!");  
        }  
    }  


import java.lang.*;

public class Demo
{
public static void main(String[] args)
{
MyThread thread=new MyThread();
new Thread(thread,"A").start();
new Thread(thread,"B").start();
new Thread(thread,"C").start();
}
}

class MyThread implements Runnable
{
private int sleepTime;
public MyThread()
{
sleepTime=(int)(Math.random()*6000);  //获得随机休眠毫秒数
}

public void run()
{
try
{
System.out.println(Thread.currentThread().getName()+"要休息"+sleepTime+"ms");
Thread.sleep(sleepTime);
System.out.println(Thread.currentThread().getName()+"睡醒了。");
}
catch(Exception e)
{
System.out.println(Thread.currentThread().getName()+"被吵醒了!");
}
}
}

运行结果

输出结果代码
A要休息5299ms  
B要休息5299ms  
C要休息5299ms  
//漫长的等待  
C睡醒了。  
A睡醒了。  
B睡醒了。 

A要休息5299ms
B要休息5299ms
C要休息5299ms
//漫长的等待
C睡醒了。
A睡醒了。
B睡醒了。

    可见,因为是用一个Runnable类型的对象创建的三个新线程,这三个线程就共享了这个对象的私有成员sleepTime变量,在本次运行中,三个线程都休眠了5299毫秒。

    以上内容摘自http://coolszy.iteye.com/blog/485765
谢谢学长

分享到:
评论

相关推荐

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    例如,事件对象适合于线程间的复杂通信和协调,信号量可以控制资源的并发访问数量,互斥量适合于独占资源的访问,而临界区则适用于保护小范围的共享数据。理解并熟练运用这些机制,能够帮助开发者编写出高效且线程...

    C#-正确结束线程-通过给定信号结束线程.rar

    不恰当的线程终止可能导致数据不一致、内存泄漏或资源未释放。C#提供了多种方法来停止线程,但推荐的方法是使用线程的协同终止,即通过共享状态或信号来告知线程何时应该退出。 1. **线程协作终止:** C#中,线程的...

    qt线程共享数据 信号和槽方式

    Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式: 使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到...

    进程与线程--小练习

    但是,线程间的资源共享也带来了数据安全问题,需要正确管理同步以避免竞态条件和其他并发问题。 在"进程与线程--小练习"这个主题中,可能包含了一些实践性的例子,比如创建和管理进程、线程的示例,或者展示了如何...

    Java的多线程-线程间的通信.doc

    Java提供了多种机制来实现线程间的通信,包括使用wait(), notify()和notifyAll()方法,以及使用synchronized关键字控制并发访问共享资源。这些方法都定义在java.lang.Thread类中。 1. **wait(), notify()和...

    多线程-day02.docx

    - **可见性**:线程间对共享变量的修改能立即被其他线程感知。 - **有序性**:保证程序的执行顺序,遵循代码的逻辑顺序。 **多线程控制** 为了实现这些特性,Java提供了多种线程控制工具: 1. **ThreadLocal**:...

    Java多线程-线程间的通信

    2. **解决线程安全问题**:由于两个线程需要共享同一个计数器变量`number`,因此需要对计数器的访问进行同步控制。 3. **等待和唤醒**:为了让两个线程能够交替打印数字,需要利用`wait()`和`notify()`方法。 **...

    C#内存释放-线程控制-线程启动-线程暂停

    线程间的共享数据可能导致竞态条件,这可能会导致意外的行为。为了安全地访问共享数据,可以使用锁(如`lock`关键字)或监视器(`Monitor`类),以确保同一时间只有一个线程能访问这部分代码。此外,`volatile`...

    操作系统实验-----MFC线程--购票系统演示

    与进程不同,线程共享同一地址空间,因此线程间的通信和数据交换更为高效。在购票系统中,可能有多个线程同时运行,模拟用户购票的操作,这样可以提高系统的响应速度和并发能力。 在MFC中,创建线程通常通过继承...

    操作系统-创建多线程-读者写者

    这个问题描述了一个场景:多个线程试图读取共享资源,同时可能有一个或多个线程试图修改这个资源。为了保证数据的一致性,需要确保当有写操作正在进行时,其他所有读和写操作都不能访问资源;而当没有写操作时,可以...

    Linux编程手册-多线程-详细资料.rar

    同时,介绍了线程间通信的方式,如管道、消息队列和共享内存等,这些都是实现并发程序协同工作的核心。 文档中可能还包含了关于线程安全函数的讲解,这些函数在多线程环境下能够正确工作,不会因并发访问而导致错误...

    RT-Thread线程-创建线程

    在操作系统中,线程是程序执行的最小单元,它可以独立地执行一段代码,与进程相比,线程间的通信和资源共享更为便捷,因此在多任务应用中更受欢迎。在RT-Thread中,创建线程意味着定义一个任务,分配一定的内存空间...

    Java多线程-多线程知识点总结和企业真题

    - **线程安全问题**:当多个线程访问同一资源时可能会出现数据不一致的问题。 - **同步机制**:通过`synchronized`关键字、`ReentrantLock`等来控制对共享资源的访问,确保线程安全。 5. **解决单例模式中的懒汉...

    多线程-VB.net开发实例_vb.net多线程_

    如果这些输出方法访问了共享资源,可能需要使用`Monitor`, `Mutex`, `Lock`等同步机制来确保线程安全,防止数据不一致。 6. **项目文件解析**: - `UpgradeLog.htm`:可能是升级日志文件,记录了程序升级或更新的...

    vc多线程-mfc-大家可以看看

    4. **线程同步**:在多线程编程中,数据共享和资源竞争问题需要通过同步机制解决。MFC提供了多种同步对象,如`CSemaphore`(信号量)、`CCriticalSection`(临界区)、`CMutex`(互斥量)等。使用这些对象可以确保在...

    java线程-Java内存模型

    在多线程环境下,线程间的共享变量存储在堆中,而每个线程都有自己的工作内存,其中包含从主内存拷贝的共享变量副本。 1. 可见性问题:在多核CPU环境中,每个核心都有自己的高速缓存(L1、L2、L3等)。当一个线程...

    线程间通信方式3:消息传递方式

    - 在多线程环境中,数据共享是需要特别注意的问题。消息传递可以作为避免数据竞争的一种手段,因为每个线程通过消息队列顺序地接收和处理消息,而不是直接访问共享数据。 - 但需要注意的是,如果消息涉及到共享...

    线程 - 实例详解(从初级到高级系列讲解)

    - **线程静态属性([ThreadStatic])**:这种属性修饰符使得字段在每个线程中都有单独的副本,避免了线程间的数据竞争。 - **`ThreadLocal<T>`类**:提供了线程本地存储的一种实现方式,允许每个线程拥有特定类型的...

Global site tag (gtag.js) - Google Analytics