java多线程编程离不开锁,和锁管的几个函数有wait,notify,sleep,join等
首先来看这个几个方法的结构以及所在的类
wait和notify以及notifyAll 都是在java的超类Object里面,这样设计的目的,个人见解可能是实现面向对象的需要,把每个对象都放在jvm的等待队列里面
sleep和join 都是在类thread中
作用:
sleep()方法 : 使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会;
sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程无法访问这个对象(即使睡着也持有对象锁)。
在sleep()休眠时间期满后,该线程不一定会立即执行,这是因为其它线程可能正在运行而且没有被调度为放弃执行,除非此线程具有更高的优先级。
wait()方法 : Object类里的方法;当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去(释放)了对象的机锁(暂时失去机锁,wait(long timeout)超时时间到后还需要返还对象锁);其他线程可以访问;
wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。
wiat()必须放在synchronized block中,否则会在program runtime时扔出出”java.lang.IllegalMonitorStateException“异常
notify以及notifyAll:唤醒该对象等待池中的对象继续执行工作
Join:必须在线程调用start方法之后才能调用,不然则不起作用,具体的可以查看jvm的thread的源码,join方法的作用就是等待某个线程的终止
需要注意的是notify和wait的实现,必须有对象锁的实现,不然就会爆出IllegalMonitorStateException异常
以下为用wait以及notify实现的消费者-生产者的例子
/**
* QueueBuffer.java Create on 2014年8月5日
*
* Copyright (c) 2014年8月5日 by dzh
*
* @author <a href="xingyu@gw.com.cn">xingyu</a>
* @version 0.0.1
*
*/
package org.dzh.thread.setAndget;
/**@className:QueueBuffer.java
* @description:消费池子队列
* @date 2014年8月5日 下午4:48:26
*/
public class QueueBuffer {
private int num;
/**是否被设置值*/
private boolean valueSet = false;
synchronized int get(){
if(!valueSet){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
valueSet = false;
notify();
return num;
}
synchronized void set(int n){
if(valueSet){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
valueSet = true;
notify();
this.num = n;
}
}
/**
* Product.java Create on 2014年8月5日
*
* Copyright (c) 2014年8月5日 by dzh
*
* @author <a href="xingyu@gw.com.cn">xingyu</a>
* @version 0.0.1
*
*/
package org.dzh.thread.setAndget;
/**@className:Product.java
* @description:生产者
* @date 2014年8月5日 下午4:57:25
*/
public class Product extends Thread{
private QueueBuffer qb;
public Product(QueueBuffer qb,String name){
super(name);
this.qb = qb;
}
@Override
public void run() {
int num = 1;
for (; ; ) {
qb.set(num);
num++;
}
}
}
/**
* Consumer.java Create on 2014年8月5日
*
* Copyright (c) 2014年8月5日 by dzh
*
* @author <a href="xingyu@gw.com.cn">xingyu</a>
* @version 0.0.1
*
*/
package org.dzh.thread.setAndget;
/**@className:Consumer.java
* @description:消费者
* @date 2014年8月5日 下午4:57:49
*/
public class Consumer extends Thread{
private QueueBuffer qb;
public Consumer(QueueBuffer qb,String name){
super(name);
this.qb = qb;
}
@Override
public void run() {
System.out.println(qb.get());
}
}
相关推荐
在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享资源的访问,而wait/notify...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
在Java编程中,多线程和异步调用是提高应用程序性能和响应能力的重要手段。在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应速度。本示例着重探讨如何在Java中实现和管理多线程,以及它带来的挑战和解决方案。 一、Java多线程基础 1. ...
为了避免多线程环境下资源竞争导致的数据不一致,Java提供了多种同步机制,包括synchronized关键字、Lock接口、wait()和notify()等。synchronized可以保证同一时间只有一个线程访问临界区,Lock提供更细粒度的锁...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...
Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用...
在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统效率和响应性。这份“Java多线程编程指南”深入探讨了这一主题,为中级到高级的Java开发者提供了宝贵的资源。 首先,多线程...
Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。这个压缩包文件"JAVA多...
Java多线程是Java编程中的核心概念,尤其在如今并发性能至关重要的软件开发中,它的重要性不言而喻。深入理解Java多线程能够帮助开发者有效地利用计算机资源,提高程序的执行效率,优化系统性能。 Java多线程的实现...
Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着核心角色。在实际项目中,多线程被广泛应用于提高系统效率、实现任务并行处理,以及优化资源利用。以下是对"java多线程测试实例"的详细解析: ...
在Java编程中,多线程是程序设计中的一个重要概念,特别是在服务器端应用和高并发场景下,多线程能够充分利用CPU资源,提高程序的执行效率。本知识点将深入探讨Java多线程编程模板,帮助开发者理解和掌握如何在Java...
### Java多线程知识点详解 #### 一、Java Thread 概念 在Java中,**线程**是一种轻量级的进程,它是程序执行流的最小单元。一个标准的Java应用通常至少包含一个线程,即主(Main)线程。Java支持多线程编程,这...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提升系统效率。在面试中,对Java多线程的理解和熟练运用往往成为衡量开发者技能水平的重要标准。以下是对Java多线程面试题59题集合中可能涉及的...
线程可以通过sleep()方法进入阻塞状态,通过join()方法让主线程等待子线程完成,通过wait()和notify()或notifyAll()方法进行线程间的同步与通信。 Java提供了多种线程控制机制,如synchronized关键字用于实现互斥...
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...