zl程序教程

Oracle官方并发教程

  • Oracle官方并发教程之活跃度

    Oracle官方并发教程之活跃度

    当DeadLock运行后,两个线程极有可能阻塞,当它们尝试调用bowBack方法时。没有哪个阻塞会结束,因为每个线程都在等待另一个线程退出bow方法。 饥饿和活锁 原文地址 饥饿和活锁并不如死锁一般普遍,但它仍然是每个并发程序设计者可能会遇到的问题。 饥饿是指当一个线程不能正常的访问共享资源并且不能正常执行的情况。这通常在共享资源被其他“贪心”的线程长期时发生。举个例子,假设一个对象提供了

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之线程对象

    Oracle官方并发教程之线程对象

    需要注意的是,上述两个例子都需要调用Thread.start()方法来启动一个新的线程。 哪一种方式是我们应该使用的?相对来说,第一种更加通用,因为Runnable对象可以继承于其他类(Java只支持单继承,当一个类继承与Thread类后,就无法继承与其他类)。第二种方法更易于在简单的应用程序中使用,但它的局限就是:你的任务类必须是Thread的子类。这个课程更加聚焦于第一种将Runnable任务

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之高级并发对象

    Oracle官方并发教程之高级并发对象

    原文地址,译文地址 译者:李任 目前为止,该教程重点讲述了最初作为Java平台一部分的低级别API。这些API对于非常基本的任务来说已经足够,但是对于更高级的任务就需要更高级的API。特别是针对充分利用了当今多处理器和多核系统的大规模并发应用程序。 本节,我们将着眼于Java 5.0新增的一些高级并发特征。大多数特征已经在新的java.util.concurrent包中实现。Java集合框架中

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之同步

    Oracle官方并发教程之同步

    Counter类被设计成:每次调用increment()方法,c的值加1;每次调用decrement()方法,c的值减1。如果当同一个Counter对象被多个线程引用,线程间的干扰可能会使结果同我们预期的不一致。 当两个运行在不同的线程中却作用在相同的数据上的操作交替执行时,就发生了线程干扰。这意味着这两个操作都由多个步骤组成,而步骤间的顺序产生了重叠。 Counter类实例的操作会交替执行,

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之线程池

    Oracle官方并发教程之线程池

    原文链接,译文链接,译者:Greenster,校对:郑旭东 在java.util.concurrent包中多数的执行器实现都使用了由工作线程组成的线程池,工作线程独立于所它所执行的Runnable任务和Callable任务,并且常用来执行多个任务。 使用工作线程可以使创建线程的开销最小化。在大规模并发应用中,创建大量的Thread对象会占用占用大量系统内存,分配和回收这些对象会产生很大的开销。

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之Executor接口

    Oracle官方并发教程之Executor接口

    原文链接,译文链接,译者:Greenster,校对:郑旭东 java.util.concurrent中包括三个Executor接口: Executor,一个运行新任务的简单接口。 ExecutorService,扩展了Executor接口。添加了一些用来管理执行器生命周期和任务生命周期的方法。 ScheduledExecutorService,扩展了ExecutorService。支持Fu

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之中断

    Oracle官方并发教程之中断

    原文链接,译文链接,译者: 蘑菇街-小宝   校对:梁海舰 中断是给线程的一个指示,告诉它应该停止正在做的事并去做其他事情。一个线程究竟要怎么响应中断请求取决于程序员,不过让其终止是很普遍的做法。这是本文重点强调的用法。 一个线程通过调用对被中断线程的Thread对象的interrupt()方法,发送中断信号。为了让中断机制正常工作,被中断的线程必须支持它自己的中断(即要自己处理中断) 线程

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之不可变对象

    Oracle官方并发教程之不可变对象

    原文链接,译文链接,译者:Greenster,校对:郑旭东 一个对象如果在创建后不能被修改,那么就称为不可变对象。在并发编程中,一种被普遍认可的原则就是:尽可能的使用不可变对象来创建简单、可靠的代码。在并发编程中,不可变对象特别有用。由于创建后不能被修改,所以不会出现由于线程干扰产生的错误或是内存一致性错误。 但是程序员们通常并不热衷于使用不可变对象,因为他们担心每次创建新对象的开销。实际上这

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之一个同步类的例子

    Oracle官方并发教程之一个同步类的例子

    使用SynchronizedRGB时需要小心,避免其处于不一致的状态。例如一个线程执行了以下代码: 如果有另外一个线程在Statement 1之后、Statement 2之前调用了color.set方法,那么myColorInt的值和myColorName的值就会不匹配。为了避免出现这样的结果,必须要像下面这样把这两条语句绑定到一块执行: 4.14.1.以下对迁移Oracle到PoalrD

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之锁对象

    Oracle官方并发教程之锁对象

    原文地址,译文地址,译者:李任,校对:郑旭东 同步代码依赖于一种简单的可重入锁。这种锁使用简单,但也有诸多限制。java.util.concurrent.locks包提供了更复杂的锁。我们不会详细考察这个包,但会重点关注其最基本的接口,锁。 锁对象作用非常类似同步代码使用的隐式锁。如同隐式锁,每次只有一个线程可以获得锁对象。通过关联Condition对象,锁对象也支持wait/notify

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之原子变量

    Oracle官方并发教程之原子变量

    原文地址,译文地址 ,译者:李任,校对:郑旭东 java.util.concurrent.atomic包定义了对单一变量进行原子操作的类。所有的类都提供了get和set方法,可以使用它们像读写volatile变量一样读写原子类。就是说,同一变量上的一个set操作对于任意后续的get操作存在happens-before关系。原子的compareAndSet方法也有内存一致性特点,就像应用到整型原子

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之Guarded Blocks

    Oracle官方并发教程之Guarded Blocks

    原文连接,译文连接,译者:Greester,校对:郑旭东 多线程之间经常需要协同工作,最常见的方式是使用Guarded Blocks,它循环检查一个条件(通常初始值为true),直到条件发生变化才跳出循环继续执行。在使用Guarded Blocks时有以下几个步骤需要注意: 假设guardedJoy()方法必须要等待另一线程为共享变量joy设值才能继续执行。那么理论上可以用一个简单的条件循环来

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之活跃度

    Oracle官方并发教程之活跃度

    当DeadLock运行后,两个线程极有可能阻塞,当它们尝试调用bowBack方法时。没有哪个阻塞会结束,因为每个线程都在等待另一个线程退出bow方法。 饥饿和活锁 原文地址 饥饿和活锁并不如死锁一般普遍,但它仍然是每个并发程序设计者可能会遇到的问题。 饥饿是指当一个线程不能正常的访问共享资源并且不能正常执行的情况。这通常在共享资源被其他“贪心”的线程长期时发生。举个例子,假设一个对象提供了

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之线程对象

    Oracle官方并发教程之线程对象

    原文链接,译文链接,译者:郑旭东 在Java中,每个线程都是Thread类的实例。并发应用中一般有两种不同的线程创建策略。 直接控制线程的创建和管理,每当应用程序需要执行一个异步任务的时候就为其创建一个线程 将线程的管理从应用程序中抽象出来作为执行器,应用程序将任务传递给执行器,有执行器负责执行。 这一节,我们将讨论Thread对象,有关Executors将在高级并发对象一节中讨论。

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之高级并发对象

    Oracle官方并发教程之高级并发对象

    原文地址,译文地址 译者:李任 目前为止,该教程重点讲述了最初作为Java平台一部分的低级别API。这些API对于非常基本的任务来说已经足够,但是对于更高级的任务就需要更高级的API。特别是针对充分利用了当今多处理器和多核系统的大规模并发应用程序。 本节,我们将着眼于Java 5.0新增的一些高级并发特征。大多数特征已经在新的java.util.concurrent包中实现。Java集合框架中

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之执行器(Executors)

    Oracle官方并发教程之执行器(Executors)

    原文链接,译文链接,译者:Greenster,校对:郑旭东 在之前所有的例子中,Thread对象表示的线程和Runnable对象表示的线程所执行的任务之间是紧耦合的。这对于小型应用程序来说没问题,但对于大规模并发应用来说,合理的做法是将线程的创建与管理和程序的其他部分分离开。封装这些功能的对象就是执行器,接下来的部分将讲详细描述执行器。 047:使用SQL SELECT语句检索数据(Retri

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之同步

    Oracle官方并发教程之同步

    原文链接 下面这个简单的Counter类: class Counter { private int c = 0; public void increment() { c++; public void decrement() { c--; public int value() { return c; Counter类被设计成:每次调用increment()方法,

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之线程池

    Oracle官方并发教程之线程池

    原文链接,译文链接,译者:Greenster,校对:郑旭东 在java.util.concurrent包中多数的执行器实现都使用了由工作线程组成的线程池,工作线程独立于所它所执行的Runnable任务和Callable任务,并且常用来执行多个任务。 使用工作线程可以使创建线程的开销最小化。在大规模并发应用中,创建大量的Thread对象会占用占用大量系统内存,分配和回收这些对象会产生很大的开销。

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之Executor接口

    Oracle官方并发教程之Executor接口

    原文链接,译文链接,译者:Greenster,校对:郑旭东 java.util.concurrent中包括三个Executor接口: Executor,一个运行新任务的简单接口。 ExecutorService,扩展了Executor接口。添加了一些用来管理执行器生命周期和任务生命周期的方法。 ScheduledExecutorService,扩展了ExecutorService。支持Fu

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之中断

    Oracle官方并发教程之中断

    原文链接,译文链接,译者: 蘑菇街-小宝   校对:梁海舰 中断是给线程的一个指示,告诉它应该停止正在做的事并去做其他事情。一个线程究竟要怎么响应中断请求取决于程序员,不过让其终止是很普遍的做法。这是本文重点强调的用法。 一个线程通过调用对被中断线程的Thread对象的interrupt()方法,发送中断信号。为了让中断机制正常工作,被中断的线程必须支持它自己的中断(即要自己处理中断) 线程

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之不可变对象(定义不可变对象的策略)

    Oracle官方并发教程之不可变对象(定义不可变对象的策略)

    原文链接,译文链接,译者:Greenster,校对:郑旭东 以下的一些规则是创建不可变对象的简单策略。并非所有不可变类都完全遵守这些规则,不过这不是编写这些类的程序员们粗心大意造成的,很可能的是他们有充分的理由确保这些对象在创建后不会被修改。但这需要非常复杂细致的分析,并不适用于初学者。 不要提供setter方法。(包括修改字段的方法和修改字段引用对象的方法) 将类的所有字段定义为final

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之不可变对象

    Oracle官方并发教程之不可变对象

    原文链接,译文链接,译者:Greenster,校对:郑旭东 一个对象如果在创建后不能被修改,那么就称为不可变对象。在并发编程中,一种被普遍认可的原则就是:尽可能的使用不可变对象来创建简单、可靠的代码。在并发编程中,不可变对象特别有用。由于创建后不能被修改,所以不会出现由于线程干扰产生的错误或是内存一致性错误。 但是程序员们通常并不热衷于使用不可变对象,因为他们担心每次创建新对象的开销。实际上这

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之一个同步类的例子

    Oracle官方并发教程之一个同步类的例子

    使用SynchronizedRGB时需要小心,避免其处于不一致的状态。例如一个线程执行了以下代码: 如果有另外一个线程在Statement 1之后、Statement 2之前调用了color.set方法,那么myColorInt的值和myColorName的值就会不匹配。为了避免出现这样的结果,必须要像下面这样把这两条语句绑定到一块执行: 物流项目中Oracle 数据库的使用及OGG是如何

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程

    Oracle官方并发教程

    计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙于重新格式化文本和刷新显示的情况下同时响应键

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之锁对象

    Oracle官方并发教程之锁对象

    原文地址,译文地址,译者:李任,校对:郑旭东 同步代码依赖于一种简单的可重入锁。这种锁使用简单,但也有诸多限制。java.util.concurrent.locks包提供了更复杂的锁。我们不会详细考察这个包,但会重点关注其最基本的接口,锁。 锁对象作用非常类似同步代码使用的隐式锁。如同隐式锁,每次只有一个线程可以获得锁对象。通过关联Condition对象,锁对象也支持wait/notify

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之原子变量

    Oracle官方并发教程之原子变量

    对于这个简单的类,同步是一种可接受的解决方案。但是对于更复杂的类,我们可能想要避免不必要同步所带来的活跃度影响。将int替换为AtomicInteger允许我们在不进行同步的情况下阻止线程干扰,如AtomicCounter:

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之并发集合

    Oracle官方并发教程之并发集合

    原文地址 译文地址  译者:李任  校对:方腾飞 java.util.concurrent包囊括了Java集合框架的一些附加类。它们也最容易按照集合类所提供的接口来进行分类: BlockingQueue定义了一个先进先出的数据结构,当你尝试往满队列中添加元素,或者从空队列中获取元素时,将会阻塞或者超时。 ConcurrentMap是java.util.Map的子接口,定义了一些有用的原子操作

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之Guarded Blocks

    Oracle官方并发教程之Guarded Blocks

    原文连接,译文连接,译者:Greester,校对:郑旭东 多线程之间经常需要协同工作,最常见的方式是使用Guarded Blocks,它循环检查一个条件(通常初始值为true),直到条件发生变化才跳出循环继续执行。在使用Guarded Blocks时有以下几个步骤需要注意: 假设guardedJoy()方法必须要等待另一线程为共享变量joy设值才能继续执行。那么理论上可以用一个简单的条件循环来

    日期 2023-06-12 10:48:40     
  • Oracle官方并发教程之并发随机数

    Oracle官方并发教程之并发随机数

    原文地址 译文地址 译者:李任 校对:方腾飞 在JDK7中,java.util.concurrent包含了一个相当便利的类,ThreadLocalRandom,当应用程序期望在多个线程或ForkJoinTasks中使用随机数时。 对于并发访问,使用TheadLocalRandom代替Math.random()可以减少竞争,从而获得更好的性能。 你只需调用ThreadLocalRandom.c

    日期 2023-06-12 10:48:40