线程同步
来源:互联网 发布:八度网络空间 编辑:程序博客网 时间:2024/06/14 14:45
-----------siwuxie095
同步代码块:
在代码块前加上synchronized 关键字,则此代码块就称为 同步代码块
同步代码块格式:
同步方法:
除了代码块可以同步,方法也可以同步
同步方法格式:
代码:
package com.siwuxie095.thread;
/**
*同一辆车共 5张车票,有 3个售票窗口
* 3个售票窗口即 3个线程
*
* @author siwux
*
*/
class MyRunnableDemoimplements Runnable{
privateint ticket=5;
//复写 run() 方法
publicvoid run() {
//循环次数超过 5 次即可,这里设为 10
for (int i =0; i < 10; i++) {
//同步代码块:传入 this 即可
//如果没有同步代码块,则就会出现卖到 0 和 -1(注意:这里设置了 ticket>0 的条件)
//出现这种情况的原因就是资源无法共享。要解决类似的资源共享的问题就要用到同步
//设置同步后执行速度明显变慢,但是实现了资源共享
synchronized (this) {
//如果当前的车票大于0
if (ticket>0) {
try {
//票不会一下就卖光,设置买票等待时间为 1 秒
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
//车票越卖越少
System.out.println("车票:"+ticket--);
}
}
}
}
//同步方法:把需要同步的部分,放入该方法中即可
//在上面的 run()方法的for循环里调用该方法即可
//与同步代码块等效
public synchronizedvoid sync() {
//如果当前的车票大于0
if (ticket>0) {
try {
//票不会一下就卖光,设置买票等待时间为 1 秒
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
//车票越卖越少
System.out.println("车票:"+ticket--);
}
}
}
public class ThreadSync {
public staticvoid main(String[] args) {
MyRunnableDemo r=new MyRunnableDemo();
//3个窗口,创建 3 个Thread对象
Thread t1=new Thread(r);
Thread t2=new Thread(r);
Thread t3=new Thread(r);
//启动 3 个线程,3个窗口同时在卖票
t1.start();
t2.start();
t3.start();
}
}
运行一览:
使用同步:
未使用同步:
【made by siwuxie095】
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 国内各类 WebShell 密码大全 爆破、社工用 webshell-password
- [转载]java笔试题:输出1-100之内的所有质数
- 打印星星六边形
- Android 登录处理
- 1047. 编程团体赛(20)
- 线程同步
- 第一道bfs,撸了一晚上
- idea中通过java程序直接调用python文件
- 认识防火墙与NAT服务
- redis key的操作
- 排序--归并排序
- Linux实验
- Window7搭建IIS web服务器
- Last Working Day in NOKIA