from:http://www.java2000.net/p13007Count是一个多线程偶数计数器,通常我们应该使用synchronized,或者Lock来保证该递增操作的原子性和可见性。本例使用了单例的ExecutorService,来保证Count的递增的原子性。
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class T {
- private final ExecutorService exec = Executors.newSingleThreadExecutor();
- public long getCount() throws InterruptedException, ExecutionException {
- return exec.submit(new Callable<Long>() {
- @Override
- public Long call() throws Exception {
- return ++count;
- }
- }).get();
- }
- private long count;
- public void add() {
- exec.execute(new Runnable() {
- @Override
- public void run() {
- count++;
- System.out.println(count);
- }
- });
- }
- public static void main(String[] args) {
- final T t = new T();
- class TT extends Thread {
- public void run() {
- for (int i = 1; i <= 5; i++) {
- try {
- t.add();
- System.out.println(t.getCount());
- Thread.sleep(10);
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
- }
- }
- for (int i = 1; i <= 5; i++) {
- new TT().start();
- }
- }
- }
运行结果
1
2
3
4
5
6
7
10
8
9
11
12
15
16
19
14
17
20
13
18
21
22
24
26
28
25
29
27
30
23
31
32
35
37
39
33
36
38
34
40
41
42
45
47
49
43
44
46
48
50
分享到:
相关推荐
**单例模式(Singleton Pattern)**是软件设计模式中的一种基础模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接池等,这些都...
Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口(如`ReentrantLock`)、`Semaphore`和`CountDownLatch`等,用于控制对共享资源的访问。 4. **synchronized关键字** `synchronized`关键字用于锁定...
Java提供ExecutorService接口和ThreadPoolExecutor类来创建线程池,通过调整线程池的参数,如核心线程数、最大线程数和工作队列大小,可以优化系统的性能和资源利用率。 以上就是关于"java线程笔记"中的主要知识点...
5. 线程池模式:通过ExecutorService和ThreadPoolExecutor实现,它可以有效地管理和控制线程,避免频繁创建和销毁线程带来的开销,提高系统性能。 6. 死锁预防模式:通过避免多个线程间的循环等待资源,防止死锁的...
Java提供了多种同步机制,如`synchronized`关键字、`wait()`和`notify()`方法、`Lock`接口及其实现类,用于控制对共享资源的访问,避免数据不一致性和竞态条件。 7. **死锁(Deadlock)** 死锁是指两个或多个线程...
5. 状态对象模式:用于在多线程中同步访问对象的状态,例如CountDownLatch、CyclicBarrier和Semaphore等并发工具类,它们可以帮助我们控制线程间的同步和协作。 6. 同步适配器模式:通过包装已有的线程不安全的类,...
2. 单例模式:在多线程环境中,使用双重检查锁定(DCL)实现线程安全的单例,确保唯一实例的同时避免同步开销。 3. 生产者-消费者模式:通过BlockingQueue实现线程间的通信和协作,避免了直接线程间同步,提高了程序...
1. 临界区:通过控制多线程对代码段的访问顺序。 2. 互斥对象:使用synchronized关键字实现,确保同一时刻只有一个线程访问对象。 3. 信号量:Semaphore类用于控制同时访问特定资源的线程数量。 4. 事件对象:使用...
同步机制是并发编程中的关键,Java提供了synchronized关键字来实现线程同步,确保同一时刻只有一个线程能访问临界区,同时保证了内存可见性。此外,Java还提供了更灵活的ReentrantLock,它支持公平锁和非公平锁,...
Java提供了synchronized关键字进行同步,可以是同步方法或同步代码块,以及Lock接口的实现,如ReentrantLock,它提供更细粒度的控制。线程的生命周期包括新建、就绪、运行、阻塞和消亡五个阶段。 3. 单例模式 单例...
设计模式是解决软件设计中常见问题的模板,如单例模式确保类只有一个实例,可使用双重检查锁定实现线程安全的单例。生命周期回调方法在对象创建、使用和销毁过程中被调用,如Spring框架中的初始化和销毁方法。 Java...
6. **设备管理**:虽然Java本身不直接支持硬件访问,但可以通过JNI(Java Native Interface)调用C/C++库来间接控制硬件设备,例如磁盘I/O、网络通信等。 7. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载...
- **并发控制**:在需要共享DAO实例的场景下,可以使用synchronized关键字或者Lock接口(如ReentrantLock)来实现方法或代码块的互斥访问。 2. **批处理操作** - **批量插入与更新**:在多线程环境下,可以将大量...
Java提供了各种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`java.util.concurrent`包中的高级并发工具,如`Semaphore`、`ExecutorService`等,用于控制线程访问共享资源,...
在Java中,实现单例模式通常有多种方法,包括饿汉式、懒汉式(同步块)、双重检查锁定等。为了确保线程安全,这里采用双重检查锁定的方式实现。 1. **类定义**:首先定义一个名为`Logger`的类,该类包含一个私有的...
案例可能涵盖线程的创建(`Thread`类或实现`Runnable`接口)、线程同步(`synchronized`关键字、`wait()`和`notify()`方法)、线程池(`ExecutorService`)等。 4. **集合框架**:Java集合框架包括List、Set、Map等...
10. **并发控制**:在多用户环境下,需要使用锁、同步块等并发控制机制来确保数据的一致性和完整性。例如,当更新在线用户列表时,需要防止并发访问导致的数据不一致。 以上是JavaChat项目中涉及的一些核心技术和...