13.8 线程加锁的设置,所谓线程就是为了防止多个线程为同一个动作进行操作。
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
- 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
13.9 对方法进行加锁:
代码如下:
packagecom.eduask.thread.base;
importcom.sun.swing.internal.plaf.synth.resources.synth;
//测试线程加锁的现象;
publicclassTestThreadSync {
publicstaticvoidmain(String[] args)throwsInterruptedException {
MySnc1 mySnc1=newMySnc1();
Thread thread1=newThread(mySnc1);
thread1.start();
thread1.sleep(1000);
mySnc1.m1();
}
}
classMySnc1implementsRunnable{
Integer money=100;
@Override
publicsynchronizedvoidrun() {
money=10;
System.out.println(money);
}
publicvoidm1() {
System.out.println(money+"m1");
}
}
13.10 对对象进行加载代码如下;
packagecom.eduask.thread.base;
//对对象进行加锁;
publicclassObjectSync {
publicstaticvoidmain(String[] args) {
A a =newA();
Thread thread =newThread(a);
thread.start();
}
}
classAimplementsRunnable {
publicvoidrun() {
synchronized(this) {
System.out.println("对对象进行加锁");
}
}
}
分享到:
相关推荐
Java 多线程加锁以及 Condition 类的使用实例解析 摘要:本篇文章主要介绍了 Java 多线程加锁机制和 Condition 类的使用实例解析,通过示例代码详细介绍了多线程加锁和 Condition 类的使用方法,对大家的学习或者...
本文将深入探讨Java线程锁的使用、原理以及实例代码。 一、线程锁的概念与作用 线程锁,也称为互斥锁,主要用于控制多个线程对共享资源的访问,以避免并发执行时出现数据不一致的情况。当一个线程持有锁时,其他...
lock.lock()的加锁方式,会使后续请求的线程堵塞等待。(方案A) lock.tryLock()的加锁方式,不会堵塞,会立即返回加锁成功与否。(方案AEX) lock.tryLock(1000, TimeUnit.SECONDS)的加锁方式,允许堵塞时间,若在...
Java加锁工具类。用于普通加锁。 可以用到的场景有: 1、多线程对同一数据进行处理时,通过此类进行简单加锁。 2、想保证后台同时,只有一个线程在处理某事情时。 3、更新数据库信息时。
### Java多线程与并发编程总结 #### 一、多任务、多进程、单线程与多线程概念 在了解Java多线程之前,我们首先需要理解几个基础概念:多任务、多进程、单线程和多线程。 1. **多任务**:现代操作系统都是多任务...
#### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有...
Java线程是并发编程的核心部分,它允许程序在同一时间执行多个任务,从而提高了系统资源的利用率和程序的响应速度。本专题将深入探讨Java中的线程技术,包括线程的创建、状态管理、同步机制以及相关API的使用。 在...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
Java双重检查加锁单例模式是一种常用的单例模式实现方法,但是在多线程环境下,它存在一些问题。在这篇文章中,我们将探讨Java双重检查加锁单例模式的详解,包括它的优点和缺点,以及如何正确地使用它。 Java双重...
在Java编程语言中,多线程是并发执行多个任务的关键技术。这允许程序在等待某个操作完成时继续处理其他任务,从而提高了系统资源的利用率和程序的响应速度。本示例"java多线程的条件对象和锁对象demo"着重探讨了如何...
一张图方便理解和掌握java 多线程之间通信的实质 ...在A线程修改的过程中, 通过加锁的方法防止B线程获取该共享变量的值。锁的机制说白了,就是在获取共享变量的时候,增加了字段标识该字段是否已经被其他线程修改中
### Java线程开发讲座知识点概览 #### 一、Java线程:概念与原理 - **线程定义**:在Java中,线程是程序执行流的最小单元,一个标准的Java应用程序至少有一个线程,即主程序入口的`main()`方法。 - **线程优势**:...
在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...
- Java线程有多种状态:新建 (`NEW`)、就绪 (`RUNNABLE`)、阻塞 (`BLOCKED`)、等待 (`WAITING`)、超时等待 (`TIMED_WAITING`) 和终止 (`TERMINATED`)。 - **状态转换**: - 当线程被创建但尚未启动时,它的状态是...
之前的多线程调度、并发调度以及线程加锁安全等内容,大都依赖于线程锁机制。本文旨在通过分析JDK中的锁源码,帮助读者理解JDK是如何管理和控制这些资源的,并进一步解释线程如何能够集中等待并最终被唤醒。 #### 2...
本实例65着重讲解了Java线程同步的实现方法,帮助开发者理解和掌握如何在并发环境中保证代码的正确执行。 首先,我们要了解什么是线程。线程是程序中的执行流,每个线程都有自己的程序计数器、栈、局部变量和常量,...
### Java线程的同步与死锁 #### 一、引言 在Java中,多线程编程是一项重要的技术,能够显著提升程序的性能和响应能力。然而,随着线程数量的增加,线程间的同步问题变得越来越复杂。本文将深入探讨Java线程中的同步...
Java多线程与锁是Java并发编程中的核心概念,它们在构建高效、可扩展的并发应用程序中起着至关重要的作用。下面将详细讲解这两个主题。 首先,Java中的多线程是指程序执行时可以同时进行多个任务。这得益于操作系统...
Java多线程编程是Java平台的核心特性之一,特别是在Java 5之后,其并发包`java.util.concurrent`提供了更强大和高效的工具,使得开发者能够更好地管理线程资源,提高应用程序的性能和可伸缩性。本篇文章将深入探讨...
在IT领域,多线程和文件加锁是并发编程中的重要概念,而MySQL数据库则常用于存储和处理统计数据。这个项目或任务的核心是利用多线程技术,通过文件加锁来确保数据一致性,并且定时从MySQL数据库中获取并处理统计数据...