Java线程:线程的同步-同步块
 
对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。
 
追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。
 
在上个例子的基础上,对oper方法做了改动,由同步方法改            
                
                    
                        
                                                            
                                                                        
                                                                推荐
                                                                                        原创
                                                                                    
                            2009-11-04 13:30:06
                            
                                10000+阅读
                            
                                                        
                                点赞
                            
                                                                                    
                                7评论
                            
                                                 
                 
                
                             
         
            
            
            
            package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类.但是需要共用同一个实例. */ class WindowSell implements Runnable{ Ob            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-02-08 12:11:00
                            
                                239阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            @线程同步    同步就是协同步调,按预定的先后次序进行运行,“同”的意思不是一起运动;同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。 @线程同步什么时候用    在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。例如下面的情况:     常某现有100元            
                
         
            
            
            
            在多线程环境中,每个线程执行的时间是随机分配的,所以有的时候就会造成一个线程对一个对象操作到一半就让其他线程来操作了,结果导致了一些错误。
线程同步就是用来解决这种问题的,让我么来看看没有线程同步会有什么现象:
假如有2个人,男人和女人在不同的地方取同一个账户的钱,正巧是统一时刻,如果没有线程同步会有什么现象呢?
账户类:
/**  * 账户类  * @author lzz  */            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2012-11-12 10:43:41
                            
                                458阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。在上个例子的基础上,对oper方法做了改动,由同步方法改为同步代码块模式,程序的执行逻辑并没有问题。
package cn.thread;
/*            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-07-24 10:37:00
                            
                                192阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            Java提供了两种创建线程方法:通过实现Runable接口;通过继承Thread类本身。线程同步  为何使用同步?  
    java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),  将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,  
   
    从而            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-01 12:09:07
                            
                                77阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             
模拟一个场景,两个人对同一个账户同时取钱
 
package cn.xy.Thread;
public class Account
{
 /**
  * 账户号
  */
 private String accountNo;
 /**
  * 账户余额
  */
 pr            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2012-11-13 11:18:43
                            
                                362阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            同步代码块对象如同锁。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权。也进不去。因为没有获取锁。火车上的卫生间 --经典同步的前提:1.必须要有2个或者2个以上的线程。2.必须是多个线程使用同一个锁。必须保证同步中只能有一个线程在运行。好处:解决了多线程的安全问题。弊端:多个线程需要判断锁。较为消耗资源。/*
同步代码块
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2014-01-24 21:45:28
                            
                                747阅读
                            
                                                        
                                点赞
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            为什么要引入线程同步?什么时候要同步呢?为了数据的安全。尽管应用程序的使用率降低,但是为了保证数据是安全的,必须加入线程同步机制。什么条件下要使用线程同步?1、必须是多线程环境;2、多线程环境共享同一个数据;3、共享的数据涉及到修改操作。并发线程之间可能是无关的,也可能是交互的;并发执行的多个线程间需要共享资源或交换数据,则这一组线程称为交互线程。交互线程之间存在两种关系:竞争关系和协作关系。线程            
                
         
            
            
            
            多线程在操作同一个资源时,同一时刻只能有一个线程操作,其他线程等待这个线程操作结束后抢占操作这个资源,就是线程同步。优点:线程同步可以保证多线程在操作同一个资源时,结果的正确性。缺点:抢占式占用cpu处理器,只能保持一个线程执行,性能下降。线程同步的实现 加锁方式一:synchronized锁代码块。public class TestSyn {
    public static void ma            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-27 23:47:02
                            
                                84阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            避免死锁:不要在同一个代码块中,同时持有多个对象的锁            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-12-16 10:36:00
                            
                                204阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            线程安全出现线程安全就是在使用多线程的时候程序出现了不期望的结果。怎样思考线程安全:线程中任何一步运行完都可能            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-10-20 10:46:58
                            
                                57阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            同步代码块synchronized (obj) {
    // 代码块
}obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定。代码块中的代码是执行代码,即是某个方法中的某一部分代码,synchronized(obj){}只能出现在某个方法中。如:public void test() {
        synchronized (obj            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-18 10:45:45
                            
                                128阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            同步代码快            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-11-24 11:16:39
                            
                                95阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如果一个对象作为同步代码块的对象,那么该对象同步的代码段和该对象内部=Th            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-12-12 16:18:15
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            先说同步方法。它究竟是锁定的当前对象,还是当前类 代码块1 package com.ssss; public class Thread1 implements Runnable { //public static Object o=new Object(); public void run() {            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2018-04-07 18:29:00
                            
                                98阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。   需要明确的几个问题:  1)synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、obje            
                
         
            
            
            
            Java 同步块标识着一个方法或者一个代码块是同步处理的。Java同步块可以用来避免竞态条件。Java 中的 synchronized 关键字在Java中,通过synchronized关键字来标记同步块。Java中的同步块是基于某些对象上的同步。 所有在同一个对象上的同步块,意味着同一个时间点只能有一个线程可以进入。 而其他想要进入的线程会一直阻塞等待已经入同步块的线程退出。synchronize            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-30 22:42:34
                            
                                122阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            原文链接 作者:Jakob Jenkov 译者:李同杰Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)Jav            
                
                    
                        
                                                            
                                                                        
                                                                                        翻译
                                                                                            精选
                                                        
                            2015-05-13 13:54:41
                            
                                298阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)Java中的同步块用synchronized标记。同步块在Java中是同步在某个对象上。所有同步在一            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-01-19 23:00:57
                            
                                153阅读
                            
                                                                                    
                                2评论