什么是线程

// 线程总结:
/*
* 三种创建方式:
* 什么是线程 : 程序的多个执行路径 ,改变了程序顺序执行的特点,可以多条线共同执行,实际是模拟的并行
* 那么既然是并发,就存在线程安全问题,即同时访问同一份数据
* 因此就要保证要访问的数据的安全性
* 涉及到 锁!!!
* synchronized
* 同步块 (引用类型|.class类|) | 同步方法 加在方法上
* 注意 锁的位置可能影响程序执行的性能,因此要合理的考虑锁添加的位置
*
*/
public class Test02 {

public static void main(String[] args) {

Ticket tic = new Ticket();
// 两个线程同时代理一个对象
// 并且同时读取同一份唯一的资源
Thread t = new Thread(tic);
Thread t2 = new Thread(tic);

t.start();
t2.start();
}

}
class Ticket implements Runnable{
private int num = 20;
public void run(){
while(true){
if(num>0){
System.out.println(num--);
}else {
break;
}
}
}

}

在哪里加锁呢?

显然我们可以直接在方法上加锁,但是太傻了,相当于我们在卖票窗口买票,结果在售票大厅加了一把锁,这样效率太低了。

因此我们可以把锁加在方法里,更具体的是循环里。

public void run(){
while(true){

synchronized(this)

if(num>0){
System.out.println(num--);
}else {
break;
}}

这样就可以保证每次只有一个线程能够读取到。

注意:一定要保证同步块中是引用类型,并且其指向不能改变。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值