当多个线程的执行代码来自同一个类的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
谢谢学长
分享到:
相关推荐
例如,事件对象适合于线程间的复杂通信和协调,信号量可以控制资源的并发访问数量,互斥量适合于独占资源的访问,而临界区则适用于保护小范围的共享数据。理解并熟练运用这些机制,能够帮助开发者编写出高效且线程...
不恰当的线程终止可能导致数据不一致、内存泄漏或资源未释放。C#提供了多种方法来停止线程,但推荐的方法是使用线程的协同终止,即通过共享状态或信号来告知线程何时应该退出。 1. **线程协作终止:** C#中,线程的...
Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式: 使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到...
但是,线程间的资源共享也带来了数据安全问题,需要正确管理同步以避免竞态条件和其他并发问题。 在"进程与线程--小练习"这个主题中,可能包含了一些实践性的例子,比如创建和管理进程、线程的示例,或者展示了如何...
Java提供了多种机制来实现线程间的通信,包括使用wait(), notify()和notifyAll()方法,以及使用synchronized关键字控制并发访问共享资源。这些方法都定义在java.lang.Thread类中。 1. **wait(), notify()和...
- **可见性**:线程间对共享变量的修改能立即被其他线程感知。 - **有序性**:保证程序的执行顺序,遵循代码的逻辑顺序。 **多线程控制** 为了实现这些特性,Java提供了多种线程控制工具: 1. **ThreadLocal**:...
2. **解决线程安全问题**:由于两个线程需要共享同一个计数器变量`number`,因此需要对计数器的访问进行同步控制。 3. **等待和唤醒**:为了让两个线程能够交替打印数字,需要利用`wait()`和`notify()`方法。 **...
线程间的共享数据可能导致竞态条件,这可能会导致意外的行为。为了安全地访问共享数据,可以使用锁(如`lock`关键字)或监视器(`Monitor`类),以确保同一时间只有一个线程能访问这部分代码。此外,`volatile`...
与进程不同,线程共享同一地址空间,因此线程间的通信和数据交换更为高效。在购票系统中,可能有多个线程同时运行,模拟用户购票的操作,这样可以提高系统的响应速度和并发能力。 在MFC中,创建线程通常通过继承...
这个问题描述了一个场景:多个线程试图读取共享资源,同时可能有一个或多个线程试图修改这个资源。为了保证数据的一致性,需要确保当有写操作正在进行时,其他所有读和写操作都不能访问资源;而当没有写操作时,可以...
同时,介绍了线程间通信的方式,如管道、消息队列和共享内存等,这些都是实现并发程序协同工作的核心。 文档中可能还包含了关于线程安全函数的讲解,这些函数在多线程环境下能够正确工作,不会因并发访问而导致错误...
在操作系统中,线程是程序执行的最小单元,它可以独立地执行一段代码,与进程相比,线程间的通信和资源共享更为便捷,因此在多任务应用中更受欢迎。在RT-Thread中,创建线程意味着定义一个任务,分配一定的内存空间...
- **线程安全问题**:当多个线程访问同一资源时可能会出现数据不一致的问题。 - **同步机制**:通过`synchronized`关键字、`ReentrantLock`等来控制对共享资源的访问,确保线程安全。 5. **解决单例模式中的懒汉...
如果这些输出方法访问了共享资源,可能需要使用`Monitor`, `Mutex`, `Lock`等同步机制来确保线程安全,防止数据不一致。 6. **项目文件解析**: - `UpgradeLog.htm`:可能是升级日志文件,记录了程序升级或更新的...
4. **线程同步**:在多线程编程中,数据共享和资源竞争问题需要通过同步机制解决。MFC提供了多种同步对象,如`CSemaphore`(信号量)、`CCriticalSection`(临界区)、`CMutex`(互斥量)等。使用这些对象可以确保在...
当我们使用多个线程访问同一资源(可以是同一个变量、同一个文件、同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题(因为不会对数据进行修改)。但是如果多个线程中对资源有读和写的操作,就...
在多线程环境下,线程间的共享变量存储在堆中,而每个线程都有自己的工作内存,其中包含从主内存拷贝的共享变量副本。 1. 可见性问题:在多核CPU环境中,每个核心都有自己的高速缓存(L1、L2、L3等)。当一个线程...
3. **数据共享**:在多线程环境下,数据共享需要特别注意线程安全。可以使用`QMutex`、`QReadWriteLock`等同步工具防止数据竞争。当多个线程尝试同时访问和修改同一数据时,这些同步机制可以确保数据的一致性。 4. ...
- 在多线程环境中,数据共享是需要特别注意的问题。消息传递可以作为避免数据竞争的一种手段,因为每个线程通过消息队列顺序地接收和处理消息,而不是直接访问共享数据。 - 但需要注意的是,如果消息涉及到共享...