开发者学堂课程【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();
}
}
}
注意:线程同步处理之中不会去考虑方法中的参数,只会考虑类中的属性