【名师课堂】Java高级开发

【名师课堂】Java高级开发

Java核心第三部
156课时 |
31736人已学 |
(17 评论)

加入学习
加入学习

同步是指所有的线程不是一起进入到方法中执行,而是按照顺序一个一个进来

两种处理方法:同步代码块,同步方法

1. 同步代码块必须锁定对象,所以一般可以锁定当前对象:this

class MyThread implements Runnable{
    public int ticket=10;

    @Override
    public void run() {

        for(int i=0;i<20;i++){
            synchronized(this){
            if(this.ticket>0){
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
        System.out.println(Thread.currentThread().getName()+
                " sell tickets= "+this.ticket--);
            }
            }
        }
        
                
    }
    
}

public class TestDemo {

    public static void main(String[] args) {
        MyThread mt = new MyThread();
        new Thread(mt,"Thread A").start();
        new Thread(mt,"Thread B").start();
        new Thread(mt,"Thread C").start();;
        
    }

}

2.同步方法:

class MyThread implements Runnable{
    public int ticket=10;

    @Override
    public void run() {
        for(int i=0;i<20;i++){
            this.sale();
        }
        
    }
        
        public synchronized void sale(){

            
                
                if(this.ticket>0){
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
            System.out.println(Thread.currentThread().getName()+
                    " sell tickets= "+this.ticket--);
                }
                }
}

            
public class TestDemo {

    public static void main(String[] args) {
        MyThread mt = new MyThread();
        new Thread(mt,"Thread A").start();
        new Thread(mt,"Thread B").start();
        new Thread(mt,"Thread C").start();;
        
    }

}

同步虽然是数据安全操作,但效率特别的慢

[展开全文]
sky_fengbiubiu · 2017-06-29 · 线程的同步与死锁(同步处理) 0

所谓的同步指的是所有的线程不是一起进入到方法中执行,而是按照我们的顺序一个一个进来。

如果要想实现这个“锁”,那么可以采用synchronized关键子来进行处理,同步代码块和同步方法。

1.同步代码块:在方法里拦截,进入到方法中的线程依然会有很多个。

2.同步方法:将关键字放到方法上

同步虽然可以保证数据的完整性(线程安全操作),但执行的速度会很慢。

 

[展开全文]
想飞的我 · 2017-06-25 · 线程的同步与死锁(同步处理) 0

授课教师

阿里云开发者社区全面升级
一站式体验,助力云上开发!
进入新社区

相关课程

查看更多 >

本课程相关云产品