1. 保护方法原子性的同时,也要注意保护方法中使用到的变量。下面这段代码是否一定安全?
public class Counter {
private int counter = 0;
public int getCounter() {
return counter;
}
public synchronized void add1() {
int count = counter;
counter = count + 1;
}
//other method
}
不一定,如果在other method中也处理counter但是又没有保护的情况下,会出现问题,例如
public class Counter {
private int counter = 0;
public int getCounter() {
return counter;
}
public synchronized void add1() {
System.out.println("Enter add1");
int count = counter;
try {
System.out.println("Add1 sleep");
Thread.sleep(1000);
System.out.println("Add1 wake up");
} catch(Exception e) {
e.printStackTrace();
}
counter = count + 1;
}
public void add2() {
System.out.println("Enter add2");
int count = counter;
counter = count + 1;
System.out.println("Exit add2");
}
}
执行以下代码可以看到效果
public static void main(String[] args) throws Exception {
final Counter c = new Counter();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
c.add1();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
c.add2();
}
});
t1.start();
t2.start();
Thread.sleep(2000);
System.out.println(c.getCounter());
}
输入结果:
Enter add1
Add1 sleep
Enter add2
Exit add2
Add1 wake up
Exit add1
1
分享到:
相关推荐
Java多线程笔记 Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,...
以下是对马士兵多线程笔记的详细解析。 1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核...
Java线程的知识点总结。doc
多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...
马士兵是一位知名的IT教育专家,他的多线程训练营笔记深入浅出地讲解了这一主题,帮助开发者理解并掌握多线程的精髓。 多线程允许一个程序中有多个执行流同时运行,这样可以提高应用程序的效率和响应性。在Java中,...
多线程笔记
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...
### 张孝祥Java多线程与并发库高级应用笔记概览 #### 一、Java多线程技术的重要性与挑战 Java线程技术是软件工程领域不可或缺的一部分,尤其在底层编程、Android应用开发以及游戏开发中,其重要性不言而喻。然而,...
以下是对"C#多线程笔记"中可能包含的知识点的详细解释。 1. **线程基础**: - **什么是线程**:线程是程序执行的最小单元,每个进程至少有一个线程,负责执行程序代码。 - **主线程与子线程**:主线程是程序的...
通过阅读`多线程笔记.doc`和运行`threadDemo`示例代码,你可以对Java多线程有更深入的理解,并能够在实际项目中灵活运用这些知识,解决并发问题。同时,博客地址提供了更多详细内容,可以帮助你进一步探索和实践。
java多线程笔记分享
### 多线程基础知识与应用 #### 一、线程的创建方式 在Java中,创建线程主要有两种方式:一种是通过继承`Thread`类;另一种是通过实现`Runnable`接口。 1. **继承Thread类** ```java public class MyThread ...
Java多线程详解 在Java编程中,多线程是一种重要的技术,它使得程序能够同时执行多个任务,提高系统的效率和响应性。本教程将详细讲解Java中的多线程概念,包括线程的创建、状态、同步以及高级主题,旨在帮助初学者...
### C#多线程知识点详解 #### 一、线程与窗体间的交互 在C#编程中,每个窗体通常都运行在一个独立的线程上。这意味着如果一个应用程序包含多个窗体,那么这些窗体将分别运行在各自的线程之上。当需要实现不同窗体...
### Python3多线程知识点详解 #### 一、线程基础 **线程状态** 在探讨Python3中的多线程之前,我们首先需要理解线程的基本状态及其转换过程。 - **新建**: 当一个线程被创建后,它最初处于新建状态。 - **就绪**...
java学习笔记2(多线程)java学习笔记2(多线程)
Java多线程是Java编程中不可或缺的部分,它允许程序同时执行多个任务,从而提升程序的效率和CPU的利用率。在Java中,线程是程序执行的最小单位,而进程则是资源分配的基本单位。一个进程可以包含一个或多个线程,...
本篇笔记将深入探讨C#多线程的基本概念、操作方法以及注意事项。 首先,我们要理解多线程的基本概念。线程是程序执行的最小单位,每个线程都有自己的执行路径和栈空间,但它们共享同一块堆内存。因此,线程间的通信...