1,线程同步:synchronized关键字,有一个锁对象,可以让多个线程对某个方法或某段代码互斥执行,从而可以实现多个线程安全的对共享数据并发操作等需求。(锁同时只能被一个线程拥有,线程甲执行完同步代码后释放锁,另一线程乙才能得到锁执行同步代码,各线程之间没有通信往来,由jvm自动调度,系统开销比较大,如果要实现线程间通信就用下面讲到的wait notify)参见http://baike.baidu.com/view/1207212.htm
2,线程通信:使用Object的wait和notify方法,两个方法成对使用,各线程须使用同一个锁对象。参见http://blog.csdn.net/aming2006/article/details/4463979
Object locker=new Object();
//假设线程A执行下面代码
/**
* synchronized让当前线程A得到对象锁,一个线程只有得到锁才能调用锁的wait或notify方法,如api所讲
* This method should only be called by a thread that is the owner of this object's monitor.
* A thread becomes the owner of the object's monitor in one of three ways:
*
* By executing a synchronized instance method of that object.
* By executing the body of a synchronized statement that synchronizes on the object.
* For objects of type Class, by executing a synchronized static method of that class.
*
* Only one thread at a time can own an object's monitor.
* 从api可以看到三种得到对象锁的方法都与synchronized有关,所以通常我们看到wait和notify都写在synchronized代码中
* api说的the owner of the object's monitor与我们常说的对象锁是一个意思:
* ‘A thread is the owner of the object's monitor’就是‘一个线程拥有了那个对象锁’之意
* Only one thread at a time can own an object's monitor. 一个对象锁同时只能被一个线程所拥有
*/
//线程A得到锁对象后才能执行同步块中的代码
synchronized(locker)
{
if(*)
{
locker.wait();//线程A等待 并释放锁,待其它线程得到锁并调用notify并释放锁后 当前线程A从此处继续执行下面代码
doSth
}
}
doSth
//假设线程B执行下面代码
synchronized(locker)
{
locker.notify();//通知线程A醒来工作
doSth
}//至此线程B释放锁,如果线程A在这个锁对象上wait,则A将继续执行
分享到:
相关推荐
Java线程同步与通信是多线程编程中的关键概念,用于解决并发访问共享资源时可能出现的数据不一致性和竞态条件问题。以下将详细介绍这两个主题,以及如何通过代码示例进行演示。 1. **线程同步**: 线程同步是确保...
在Java编程中,多线程通信是一个至关重要的概念,特别是在设计高效的并发应用程序时。这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念...
本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...
Java线程同步是多线程编程中的一个重要概念,它用于解决在并发环境下多个线程对共享资源的访问问题,以防止数据的不一致性。在Java中,线程同步的机制主要包括锁、同步块、同步方法、volatile关键字以及线程通信(如...
Java线程同步是Java编程中一个关键的概念,用于解决多线程环境下的数据一致性问题。在Java中,线程同步主要依赖于监视器(Monitor)机制,它支持两种线程行为:互斥和协作。 互斥是通过对象锁来实现的,确保在任意...
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...
Java线程是多线程编程的核心概念,是Java语言中实现并发执行的机制。线程安全和同步线程是确保在多线程环境下正确执行的关键因素。线程安全指的是一个方法或类在多线程环境下可以正确无误地运行,不会因为线程之间的...
在Java编程中,线程同步和互斥是多线程编程中的重要概念,它们用于解决多个线程同时访问共享资源时可能出现的问题。本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费...
### Java线程同步 为了保证数据的一致性,在多线程环境中需要对共享资源进行同步访问。Java提供了多种机制来实现线程间的同步,包括`synchronized`关键字、显式锁(`ReentrantLock`)、`volatile`关键字等。 #### ...
Java多线程同步是Java编程中关键的并发概念,它涉及到如何在多个线程访问共享资源时保持数据的一致性和完整性。`java.util.concurrent`包是Java提供的一个强大的并发工具库,它为开发者提供了多种线程安全的工具,...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
总结来说,这个Java线程同步的例子展示了以下关键知识点: 1. **线程同步**:使用`synchronized`关键字修饰方法,确保同一时刻只有一个线程能执行该方法,防止数据不一致。 2. **wait(), notify(), notifyAll()**...
书中可能深入讲解了线程同步和并发控制,这是Java线程中的核心概念。同步机制包括`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`方法,以及`java.util.concurrent`包下的高级工具如`Semaphore`, `...
本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口...
三、线程同步 为了解决多线程并发访问共享资源可能导致的问题,Java提供了多种同步机制: 1. synchronized关键字:用于方法或代码块,保证同一时间只有一个线程能执行特定代码。 2. volatile关键字:保证变量在多...
通过学习这个Java线程使用教程,你将能够熟练地在多线程环境中编写高效、安全的Java程序,理解线程同步、通信、线程池以及并发工具类的使用。阅读提供的"Java线程.pdf"和"说明.txt"文件将帮助你更深入地掌握这些知识...
学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。
Java中的线程同步是解决多线程环境下并发访问共享数据可能导致的数据不一致性问题的关键技术。在Java中,有多种方式可以实现线程同步,确保在任何时刻只有一个线程能够访问特定的共享资源。 1. **同步代码块 ...
3. 多线程同步与通信: 在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享...
Java多线程同步详解 在Java编程中,多线程是一种常见的并发执行方式,它可以提高程序的执行效率,充分利用CPU资源。然而,多线程环境下数据的安全性问题不容忽视,这就引出了Java中的同步机制。本文将深入探讨Java...