- 浏览: 539488 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
c__海棠依旧:
很强,对于我这个新手很容易理解,准们登录来给你点赞的!
BeanFactory和FactoryBean -
hudazheng:
很清晰!
X86、X64和X86_64区别 -
hugh.wang:
...
BeanFactory和FactoryBean -
CB00J:
...
Executor框架和线程池 -
Arbow:
请教一个问题。现在互联网业务的数据库通常用分片方式来连接一组数 ...
BoneCP源码——概述
1、wait
public final void wait(long timeout) throws InterruptedException
此方法为Object类的方法,在其他线程调用此对象的 notify()
方法或 notifyAll()
方法,或者超过指定的时间量前,导致当前线程等待。当前线程必须拥有此对象监视器,也就是当前线程必须要有此对象的锁,该方法必须写在synchronized修饰的方法里或synchronized同步代码块里, 否则将抛出运行时异常IllegalMonitorStateException,wait()方法相当于wait(0)方法。
2、notify
public final void notify()
此方法为Object类中的方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个
wait
方法,在对象的监视器上等待。 该方法必须写在synchronized修饰的方法里或synchronized同步代码块里, 否则将抛出运行时异常IllegalMonitorStateException。
public final void notifyAll()
唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个 wait
方法,在对象的监视器上等待。
如http://chenzehe.iteye.com/admin/blogs/1550701中的代码:
public class Info { private String country; private String city; private boolean flag = true; // true表示可以生产,但不能消费,false表示可以消费,但不能生产 public synchronized void set(String country, String city) { if (!flag) { try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.country = country; try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.city = city; this.flag = false; super.notify(); } public synchronized void get() { if (flag) { try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("country:" + this.country + "->city:" + this.city); this.flag=true; super.notify(); } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
3、join
public final void join(long millis) throws InterruptedException
是Thrad类中的方法,等待该线程终止的时间最长为millis
毫秒。超时为 0
意味着要一直等下去。public final void join()相当于join(0)。也就是使异步执行的线程变成同步,即等到该线程执行完成返回才往下执行下面代码。
如http://chenzehe.iteye.com/admin/blogs/1741137中代码:
public class MyRunnable implements Runnable { public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++) { try { n = n + 1; Thread.sleep(10); } catch (Exception e) { // TODO: handle exception } } } } public class MainTest { public static void main(String[] args) throws Exception { Thread[] threads = new Thread[100]; // 创建100个线程 for (int i = 0; i < threads.length; i++) { threads[i] = new Thread(new MyRunnable()); } // 启动100个线程 for (int i = 0; i < threads.length; i++) { threads[i].start(); } // 让100个线程都执行完 for (int i = 0; i < threads.length; i++) { threads[i].join(); } System.out.println(MyRunnable.n); } }
下面代码为join()的实现代码,发现join()也为synchronized方法,并且是调用wait()来实现的:
public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }
4、sleep
public static void sleep(long millis) throws InterruptedException
Thread类中的方法,在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。使当前线程暂停执行一段时间,让其它线程有机会执行,但它并不释放当前锁,其它线程仍不能访问共享数据。
5、yield
Thread类中的方法,与sleep类似,只是不能由用户定义多长时间,并且yield()只能让具有同优先级的程序有执行的机会。
发表评论
-
Java读取文件中单词进行排序并写到另一个文件中
2013-12-04 11:12 4764支持 http://ifeve.com/tao-code-m ... -
BoneCP源码——BoneCP中使用的第三方包 jsr166y、 LinkedTransferQueue队列、fork-join框架
2013-03-18 19:06 3469BoneCP主要使用了 ... -
redis 集群系统
2013-03-15 10:59 0redis 集群系统 -
BoneCP源码——BoneCP中使用的多线程
2013-03-16 17:53 39541、asyncExecutor 可缓存线程池,用于异步的创建 ... -
面试题——在一个文本里有N多个数据,使用多线程最快求和
2013-03-08 13:51 5444思路:把所有数据分组,每组使用一个线程去计算结果,计算完后 ... -
面试题——在多线程环境下如何保证一个List集合中的元素不超过15个
2013-02-22 19:16 4985这是有一次去面试被问到的,当时只知道用synchroniz ... -
阻塞队列BlockingQueue
2013-02-04 15:16 17381、队列Queue介绍 Queue是JDK1.5引入的接 ... -
Java 并发集合ConcurrentHashMap
2013-02-01 18:00 3582ConcurrentHashMap是JDK1.5并发包中提 ... -
Java 并发集合CopyOnWriteArrayList
2013-01-30 21:22 36081、Java在JDK1.5之前基本上对所有集合都实现了线程 ... -
携带结果的任务Callable和Future
2013-01-21 21:37 1709Executor框架使用Runnable作为基本的 ... -
线程池的使用
2013-01-17 18:23 1924线程池实现类ThreadPoolExecutor ... -
Executor框架和线程池
2013-01-15 21:08 6614简介 在JDK5后主 ... -
同步工具类之Exchanger
2013-01-11 17:11 1158Exchanger<V>,java.uti ... -
同步工具类之CyclicBarrier循环的barrier
2013-01-11 15:39 1466CyclicBarrier在java.util.c ... -
同步工具类之CountDownLatch倒数计数器
2013-01-10 20:59 3591CountDownLatch类在java.u ... -
同步工具类之Semaphore 信号量
2013-01-10 17:24 1590Semaphore可以维护 ... -
Java锁机制
2013-01-09 20:26 22967内置锁 Java提供了一种内置的锁机制来支持原子 ... -
非阻塞同步机制与CAS操作
2013-01-05 21:20 14122锁的劣势 Java在JDK1.5之前都是靠syn ... -
java.util.concurrent.atomic原子操作类包
2013-01-04 20:04 16201这个包里面提供了一组原子变量类。其基本的特性就是在 ... -
Java并发包java.util.concurrent简介
2012-12-06 19:53 3232JDK从1.5在多线程编程中提供了并发包java.u ...
相关推荐
在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开发者提供了宝贵的资源。 首先,多线程...
Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...
Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。这个压缩包文件"JAVA多...
Java多线程是Java编程中的核心概念,尤其在如今并发性能至关重要的软件开发中,它的重要性不言而喻。深入理解Java多线程能够帮助开发者有效地利用计算机资源,提高程序的执行效率,优化系统性能。 Java多线程的实现...
Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着核心角色。在实际项目中,多线程被广泛应用于提高系统效率、实现任务并行处理,以及优化资源利用。以下是对"java多线程测试实例"的详细解析: ...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提升系统效率。在面试中,对Java多线程的理解和熟练运用往往成为衡量开发者技能水平的重要标准。以下是对Java多线程面试题59题集合中可能涉及的...
在Java编程中,多线程是程序设计中的一个重要概念,特别是在服务器端应用和高并发场景下,多线程能够充分利用CPU资源,提高程序的执行效率。本知识点将深入探讨Java多线程编程模板,帮助开发者理解和掌握如何在Java...
在Java编程中,多线程是一项关键技能,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。设计模式则是解决常见编程问题的模板,通过应用这些模式,开发者可以构建更健壮、可维护的多线程系统。本实战...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,通过实现Runnable接口或者继承Thread类可以创建并运行多线程。本资料"java_Thread.rar"提供...
### Java多线程知识点详解 #### 一、Java Thread 概念 在Java中,**线程**是一种轻量级的进程,它是程序执行流的最小单元。一个标准的Java应用通常至少包含一个线程,即主(Main)线程。Java支持多线程编程,这...