线程同步(synchronized)二十
来源:互联网 发布:知乎学生会主席 编辑:程序博客网 时间:2024/05/19 03:17
/**
* 同步(并发),多个线程访问(同一份资源)+synchronized,加锁(线程安全)
* 同步:1同步方法 2同步块 synchronized(引用类型|类.class|this)
* @author Administrator
*
*/
public class SynchronizedThr {
public static void main(String[] args) throws InterruptedException {
FiveThr fth=new FiveThr("马云"); //一份资源.在run()线程体替换 task()、task1()、task1();测试
//线程不安全,没同步task();同步方法task1(); 同步块task2();看看结果如何
Thread proxy=new Thread(fth,"黄牛甲");
Thread proxy1=new Thread(fth,"黄牛乙");
Thread proxy2=new Thread(fth,"黄牛丙");
Thread proxy3=new Thread(fth,"黄牛丁");
//==================================
proxy.start();
proxy1.start();
proxy2.start();
proxy3.start();
//就绪后,等待cpu调度分配时间片---运行
Thread.sleep(5000);//放票时间5秒
fth.stop();//线程终止,死亡
}
}
class FiveThr implements Runnable{
private int tickets=20;
private String name;
private boolean flag=true;
public FiveThr(String name) {
this.name = name;
}
@Override
public void run() {//线程体
while(flag){
try {
Thread.sleep(500); //模拟延时时间,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
task1();
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
private synchronized void task1(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
private void task2(){
synchronized(this){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
}
public void stop(){
flag=false;
}
}
* 同步(并发),多个线程访问(同一份资源)+synchronized,加锁(线程安全)
* 同步:1同步方法 2同步块 synchronized(引用类型|类.class|this)
* @author Administrator
*
*/
public class SynchronizedThr {
public static void main(String[] args) throws InterruptedException {
FiveThr fth=new FiveThr("马云"); //一份资源.在run()线程体替换 task()、task1()、task1();测试
//线程不安全,没同步task();同步方法task1(); 同步块task2();看看结果如何
Thread proxy=new Thread(fth,"黄牛甲");
Thread proxy1=new Thread(fth,"黄牛乙");
Thread proxy2=new Thread(fth,"黄牛丙");
Thread proxy3=new Thread(fth,"黄牛丁");
//==================================
proxy.start();
proxy1.start();
proxy2.start();
proxy3.start();
//就绪后,等待cpu调度分配时间片---运行
Thread.sleep(5000);//放票时间5秒
fth.stop();//线程终止,死亡
}
}
class FiveThr implements Runnable{
private int tickets=20;
private String name;
private boolean flag=true;
public FiveThr(String name) {
this.name = name;
}
@Override
public void run() {//线程体
while(flag){
try {
Thread.sleep(500); //模拟延时时间,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
task1();
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
private synchronized void task1(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
private void task2(){
synchronized(this){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
}
public void stop(){
flag=false;
}
}
阅读全文
0 0
- 线程同步(synchronized)二十
- Java synchronized同步线程机制(二)
- Java线程篇(二):线程同步(synchronized和volatile)
- Java线程总结(二):线程的同步方式synchronized
- Java线程(二)----线程同步synchronized和volatile
- 线程同步(synchronized)
- 线程同步(synchronized)
- 线程同步基础(二十)
- 线程(二)线程同步synchronized和volatile
- java线程同步volatile与synchronized(二)
- Java多线程(二):线程同步synchronized和volatile
- Java 线程同步(synchronized)
- 线程同步(synchronized关键字)
- java中的线程(二)——线程的同步和synchronized深入理解
- Java线程(二):线程同步synchronized和volatile
- Java线程(二):线程同步synchronized和volatile
- Java线程(二):线程同步synchronized和volatile
- Java线程(二):线程同步synchronized和volatile
- JSP 页面重定向
- 【面经笔记】Bloom过滤器处理大规模问题
- 均值滤波代码 C代码
- ios 摄像头/相册获取图片,压缩图片,上传服务器方法总结
- POJ 1006 Biorhythms [中国剩余定理] 超短代码
- 线程同步(synchronized)二十
- windows下mysql数据库安装初始化
- hdu 1231 最大连续子序列
- Spring中Model,ModelMap以及ModelAndView之间的区别
- JDBC简介
- bzoj 4318 OSU 概率期望dp
- 入模子培训总结
- HDOJ 1166 排兵布阵(线段树)
- Python使用pymysql从MySQL数据库中读出数据