同时工作,Java运行中的线程策略——并发教程

并发

一、什么是并发?

并发是并行运行多个程序或程序的多个部分的能力。如果可以异步或并行执行耗时的任务,则可以提高吞吐量和程序的交互性。

现代计算机在一个CPU中具有多个CPU或多个内核。利用这些多核的能力可能是成功实现大批量应用程序的关键。

二、进程与线程

一个进程独立运行并与其他进程隔离。它不能直接访问其他进程中的共享数据。进程的资源(例如内存和CPU时间)通过操作系统分配给它。

一个线程是所谓的轻量级进程。它具有自己的调用堆栈,但可以在同一进程中访问其他线程的共享数据。每个线程都有自己的内存缓存。如果线程读取共享数据,则它将数据存储在其自己的内存缓存中。线程可以重新读取共享数据。

Java应用程序默认在一个进程中运行。在Java应用程序中,您需要使用多个线程来实现并行处理或异步行为。

Java中的并发

一、进程和线程

Java程序在自己的进程中运行,并且默认情况下在一个线程中运行。Java通过Thread 代码将线程作为Java语言的一部分来支持 。Java应用程序可以通过此类创建新线程。

Java 1.5还为java.util.concurrent 包中的并发提供了改进的支持 。

二、锁和线程同步

Java提供锁以保护要由多个线程同时执行的代码的某些部分。锁定一定的方法或Java类的简单的方式是定义与方法或类 synchronized 关键字。

该同步在Java中,确保关键字:

只有一个线程可以同时执行一个代码块

每个线程进入同步的代码块看到的是由同一锁保护所有先前的修改的效果

同步对于互斥访问线程的块以及线程之间的可靠通信是必需的。

您可以使用synced关键字定义方法。这样可以确保只有一个线程可以同时进入此方法。另一个正在调用此方法的线程将等到第一个线程离开此方法。

您还可以使用 synchronized 关键字来保护方法中的代码块。该块由一个键保护,该键可以是字符串或对象。该钥匙称为锁。

所有受同一锁保护的                 代码只能由一个线程同时执行

例如,以下数据结构将确保只有一个线程可以访问add() and next() 方法的内部块 。


三、不稳定的

如果使用volatile关键字声明了变量,则可以保证任何读取该字段的线程都将看到最新写入的值。该挥发性的关键字将不执行对变量的任何互斥锁。

由于到Java 5写访问易失性可变也将更新其通过相同的线程修饰的非挥发性的变量。这也可以用于更新值的参考变量中,例如用于一个易失性可变的人。在这种情况下,您必须使用临时变量person并使用setter初始化变量,然后将临时变量分配给最终变量。然后,这将使该变量的地址更改以及该值对其他线程可见。

码字不易,关注我,持续给你带来更多的IT圈干货知识。

你可能感兴趣的:(同时工作,Java运行中的线程策略——并发教程)