方法变量与同步|学习笔记

简介: 快速学习方法变量与同步

开发者学堂课程【Java 面试疑难点串讲 1 :面试技巧及语言基础方法变量与同步】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/509


方法变量与同步


内容介绍:

1. 方法中的变量是否是线程安全?

2. synchronized 的同步处理操作

方法中的变量是否是线程安全?


方法之中的变量都是属于局部变量,如果去考虑线程安全性问题,那一定是在多个线程访问同一个资源的时候进行的,既然是同一个资源,就必须考虑 Runnable、 Callable 接口来实现多线程处理关系。

 

synchronized 的同步处理操作

方法的定义上如果使用了 synchronized,那么这个方法就表示同步的处理操作,指的是当前的方法只允许有一个线程进入

package vshop;

import java.util.concurrent.TimeUnit;

class Ticket implements Runnable {

privateint count=100;//对象之中需要有堆内存保存属性,而所有的线程操作的是属性

@Override

public void run(){

while(true){

this.sale();

}

}

public synchronized void sale(){

String str =" [BEFORE]"+ Thread. currentThread ().getName ()+"运行 。";

if(this.count>0){

System.out.println(str);

try {

TimeUnit.SECONDS. sleep (2);

} catch (InterruptedException e) {

e.printstackTrace();

System.out.println(Thread.currentThread()+“卖票,ticket="+this.count str="【AFTER】"+Thread.currentThread().getName()+“运行。”;

try{

TimeUnit. SECONDS. sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(str);

}

}

}

public class Demo {

public static void main(String[] args) throws Exception {

Ticket t = new Ticket();

for (int x = 0; x < 30; x ++){

new Thread(t).start();

}

}

}

注意:线程同步处理之中不会去考虑方法中的参数,只会考虑类中的属性

相关文章
|
6月前
|
Python
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
|
3月前
|
存储 安全 编译器
C/C++陷阱——临时变量的产生和特性
C/C++陷阱——临时变量的产生和特性
|
8月前
|
缓存 运维 监控
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
116 0
Go语言,修改其他函数内部的值
Go语言,修改其他函数内部的值
65 0
|
Scala 开发者
模式中的变量 | 学习笔记
快速学习模式中的变量
41 0
模式中的变量 | 学习笔记
|
程序员 Scala 开发者
函数(方法)的调用机制|学习笔记
快速学习函数(方法)的调用机制。
71 0
函数(方法)的调用机制|学习笔记
|
编译器 Scala 开发者
隐式函数使用注意事项|学习笔记
快速学习隐式函数使用注意事项。
60 0
|
开发者 索引 Python
对象操作2|学习笔记
快速学习对象操作2
49 0
对象操作2|学习笔记
|
开发者 索引 Python
对象操作1|学习笔记
快速学习对象操作1
44 0
|
网络协议 编译器 测试技术
方法和函数区别说明|学习笔记
快速学习方法和函数区别说明
113 0