范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

深入理解关键字volatile

  volatile 关键字的作用是什么?
  相比于 synchronized 关键字(重量级锁)对性能影响较大,Java提供了一种较为轻量级的可见性和有序性问题的解决方案,那就是使用 volatile 关键字。由于使用 volatile 不会引起上下文的切换和调度,所以 volatile 对性能的影响较小,开销较低。
  从并发三要素的角度看,volatile 可以保证其修饰的变量的可见性和有序性,无法保证原子性(不能保证完全的原子性,只能保证单次读/写操作具有原子性,即无法保证复合操作的原子性)。
  下面将从并发三要素的角度介绍 volatile 如何做到可见和有序的。1. volatile 如何实现可见性?
  什么是可见性?
  可见性指当多个线程同时访问共享变量时,一个线程对共享变量的修改,其他线程可以立即看到(即任意线程对共享变量操作时,变量一旦改变所有线程立即可以看到)。1.1 可见性例子/**  * volatile 可见性例子  * @author 单程车票  */ public class VisibilityDemo {      // 构造共享变量     public static boolean flag = true; //    public static volatile boolean flag = true;   // 如果使用volatile修饰则可以终止循环      public static void main(String[] args) {         // 线程1更改flag         new Thread(() -> {             // 睡眠3秒确保线程2启动             try { TimeUnit.SECONDS.sleep(3);  } catch (InterruptedException e) {e.printStackTrace();}             // 修改共享变量             flag = false;             System.out.println("修改成功,当前flag为true");         }, "one").start();          // 线程2获取更新后的flag终止循环         new Thread(() -> {             while (flag) {              }             System.out.println("获取到修改后的flag,终止循环");         }, "two").start();     } }不使用 volatile 修饰 flag 变量时,运行程序会进入死循环,也就是说线程1对 flag 的修改并没有被线程2读到,也就是说这里的flag并不具备可见性。使用 volatile 修饰 flag 变量时,运行程序会终止循环,打印提示语句,说明线程2读到了线程1修改后的数据,也就是说被 volatile 修饰的变量具备可见性。1.2 volatile 如何保证可见性?
  被 volatile 修饰的共享变量 flag 被一个线程修改后,JMM(Java内存模型)会把该线程的CPU内存中的共享变量 flag 立即强制刷新回主存中,并且让其他线程的CPU内存中的共享变量 flag 缓存失效,这样当其他线程需要访问该共享变量 flag 时,就会从主存获取最新的数据。
  所以通过 volatile 修饰的变量可以保证可见性。
  两点疑问及解答:为什么会有CPU内存? 为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1/L2/其他)后再进行操作,但是操作完后的数据不知道何时才会写回主存。所以如果是普通变量(未被修饰的),什么时候被写入主存是不确定的,所以读取的可能还是旧值,因此无法保证可见性。各个线程的CPU内存是怎么保持一致性的? 实现了缓存一致性协议(MESI),MESI在硬件上约定了:每个处理器通过嗅探在总线上传播的数据来检查自己的CPU内存的值是否过期,当处理器发现自己的缓存行对应的内存地址被修改了,就会将当前处理器的缓存行设置为无效状态。当处理器对该数据进行修改操作时,会重新从系统内存(主存)中把数据读到处理器缓存(CPU内存)里。1.3 volatile 实现可见性的原理
  原理一:Lock指令(汇编指令)
  通过上面的例子的Class文件查看汇编指令时,会发现变量有无被 volatile 修饰的区别在于被 volatile 修饰的变量会多一个lock前缀的指令。
  lock前缀的指令会触发两个事件:将当前线程的处理器缓存行(CPU内存的最小存储单元,这里可以大致理解为CPU内存)的数据写回到主存(系统内存)中写回主存的操作会使其他线程的CPU内存中该内存地址的数据无效(缓存失效)
  所以使用 volatile 修饰的变量在汇编指令中会有lock前缀的指令,所以会将处理器缓存的数据写回主存中,同时使其他线程的处理器缓存的数据失效,这样其他线程需要使用数据时,会从主存中读取最新的数据,从而实现可见性。
  原理二:内存屏障(CPU指令)
  volatile的可见性实现除了依靠上述的LOCK指令(汇编指令)还依靠内存屏障(CPU指令)。
  为了性能优化,JMM 在不改变正确语义的前提下,会允许编译器和处理器对指令序列进行重排序。JMM 提供了内存屏障阻止这种重排序。
  这里介绍的是内存屏障中的一类:读写屏障(用于强制读取或刷新主存的数据,保证数据一致性)Store屏障:当一个线程修改了volatile变量的值,它会在修改后插入一个写屏障,告诉处理器在写屏障之前将所有存储在缓存中的数据同步到主内存。Load屏障:当另一个线程读取volatile变量的值,它会在读取前插入一个读屏障,告诉处理器在读屏障之后的所有读操作都能获得内存屏障之前的所有写操作的最新结果。
  对上面的例子使用javap查看JVM指令时,如果被 volatile 修饰时多一个 ACC_VOLATILE,JVM把字节码生成机器码时会在相应位置插入内存屏障指令,因此可以通过读写屏障实现 volatile 修饰变量的可见性。
  注意读写屏障的特点:可以将所有变量(包括不被 volatile 修饰的变量)一起全部刷入主存,尽管这个特性可以使未被 volatile 修饰的变量也具备所谓的可见性,但是不应该过于依赖这个特性,在编程时,对需要要求可见性的变量应当明确的用 volatile 修饰(当然除了volatile,synchronized、final以及各种锁都可以实现可见性,这里不过多说明)。2. volatile 如何实现有序性?
  有序性是什么?
  有序性指禁止指令重排序,即保证程序执行代码的顺序与编写程序的顺序一致(程序执行顺序按照代码的先后顺序执行)。
  为什么会发生指令重排序?
  现代计算机为了能让指令的执行尽可能的同时运行起来,采用指令流水线的方式,若指令之间不具有依赖,可以使流水线的并行最大化,所以CPU对无依赖的指令可以乱序执行,这样可以提高流水线的运行效率,在不影响最后结果的情况下,Java编译器可以通过指令重排序来优化性能。
  编译器和处理器常常会对指令做重排序,一般分为三种类型:编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行重排序:现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。内存系统重排序:由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。
  所以指令重排序是指编译器和处理器为了优化程序的性能,在不改变数据依赖性的情况下,调整指令的执行顺序。
  这种优化在单线程情况下没有问题,但是在多线程情况下可能会导致影响程序结果。接下来将介绍一个多线程下指令重排的例子。2.1 有序性例子
  这里以单例模式的常用实现方式 DLC双重检查 为例子/**  * volatile 有序性例子  * @author 单程车票  */ public class Singleton {          // 使用volatile进行修饰     private static volatile Singleton instance;      // 私有化构造器     private Singleton() {}          // 双重检查锁     public static Singleton getInstance() {         if (instance == null){             synchronized (Singleton.class){                 if (instance == null){                     instance = new Singleton();                 }             }         }         return instance;     } }
  如果写过单例模式的双重锁检查实现方式,会发现声明的变量被volatile修饰,那么为什么这里需要使用volatile修饰呢?
  第一个原因是可见性,如果没有 volatile 修饰的话,当一个线程给 instance 赋值即instance = new Singleton();后,其他线程如果无法及时看到 instance 更新,会导致创建多个单例对象,这样就不符合单例模式设计思想了,所以需要使用 volatile 修饰。
  第二个原因则是禁止指令重排序(保证有序性),为什么需要禁止指令重排呢?
  首先需要了解实例一个对象可以分为三个步骤:分配内存空间初始化对象将对象引用赋值给变量
  由于指令可以进行重排序,所以步骤可能发生变化变为分配内存空间将对象引用赋值给变量初始化对象
  如果未使用 volatile 修饰变量的话,多线程情况下可能出现这样的情况:
  一个线程在执行第二步(将对象引用赋值给变量,即此时变量不为 null )时,而另一个线程进入第一次非空检查,此时发现变量不为 null ,直接返回对象,但是此时的对象由于指令重排序的原因并未进行初始化,即返回了一个未初始化的对象。将一个未初始化的变量暴露出来会导致不可预料的后果。
  所以需要 volatile 保证变量有序性,禁止指令重排序。2.2 volatile 实现有序性的原理
  内存屏障的四种指令
  内存屏障中禁止指令重排序的内存屏障的四种指令
  指令
  说明
  LoadLoad 屏障
  保证在该屏障之后的读操作,不会被重排序到该屏障之前的读操作
  StoreStore屏障
  保证在该屏障之后的写操作,不会被重排序到该屏障之前的写操作,并且该屏障之前的写操作已被刷入主存
  StoreLoad 屏障
  保证在该屏障之后的读操作,能够看到该屏障之前的写操作对应变量的最新值
  LoadStore 屏障
  保证在该屏障之后的写操作,不会被重排序到该屏障之前的读操作
  Java编译器会在生成指令时在适当位置插入内存屏障来禁止特定类型的处理器重排序。
  volatile的插入屏障策略在每个 volatile 写操作的前面插入一个 StoreStore 屏障在每个 volatile 写操作的后面插入一个 StoreLoad 屏障在每个 volatile 读操作的后面插入一个 LoadLoad 屏障在每个 volatile 读操作的后面插入一个 LoadStore 屏障
  即在每个volatile写操作前后分别插入内存屏障,在每个volatile读操作后插入两个内存屏障。
  如何通过内存屏障保持有序性?
  分析上面的双重检查锁例子:
  不加 volatile 修饰时,多线程下可能出现的情况是这样的:
  为了避免这种情况,使用 volatile 修饰变量时,会插入内存屏障// 双重检查锁 public static Singleton getInstance() {     if (instance == null){                   // 第一次检查         synchronized (Singleton.class){      // 加锁             if (instance == null){           // 第二次检查                 插入 StorStore屏障           // 插入屏障禁止下面的new操作和读取操作重排序                 instance = new Singleton();  // 创建对象                 插入 LoadLoad屏障            // 插入屏障禁止下面的读取操作和上面的new操作重排序             }         }     }     return instance; }
  这里使用 volatile 修饰变量并不能避免实例对象的三个步骤重排序,因为 volatile 关键只能避免多个线程之间的重排序,不能避免单个线程内部的重排序。
  这里 volatile 保证有序性的作用在于插入屏障之后必须等创建对象完成后才能进行读取操作,也就是说需要线程1的创建对象整个步骤完成后才会让线程2进行读取,禁止了重排序,这样就避免了返回一个未初始化的对象,保证了有序性。3. volatile 为什么不能保证原子性?
  什么是原子性?
  原子性指一个操作或一系列操作是不可分割的,要么全部执行成功,要么全部不执行(中途不可被中断)。
  为什么volatile不能保证原子性呢?
  通过一个例子来证明volatile不能保证原子性/**  * 原子性例子  * @author 单程车票  */ public class AtomicityDemo {          // 使用volatile修饰变量     public static volatile int i = 0;      public static void main(String[] args) {         ExecutorService pool = Executors.newFixedThreadPool(1000);                  // 多线程情况下执行1000次         for (int j = 0; j < 1000; j++) {             pool.execute(() -> i++);         }                  // 打印结果         System.out.println(i);         pool.shutdown();     } }  /* 输出结果:     997 */
  正常情况下,打印结果应该为1000,但是这里却是997,说明这段程序并不是线程安全的,可以看出 volatile 无法保证原子性。
  准确来说应该是 volatile 无法保证复合操作的原子性,但能保证单个操作的原子性。
  这里 volatile 保证单个操作的原子性可以应用于 使用 volatile 修饰共享的 long 或者 double 变量(可以避免字分裂情况,具体想要了解到可以查阅相关资料这里不做过多说明)。
  i++ 操作是原子操作吗?
  i++ 其实不是原子操作,实际上 i++ 分为三个步骤:读取 i 的值将 i 自增1(i + 1)写回 i 的新值(i = i + 1)
  这三个步骤每一步都是原子操作,但是组合起来就不是原子操作了,在多线程情况下同时执行 i++,会出现数据不一致性的问题。
  所以可以证明 volatile 修饰的变量无法保证原子性。
  可以通过 AtomicInteger 或者 synchronized 来保证 i++ 的原子性。4. volatile 常见的应用场景?4.1 状态标志位
  使用 volatile 修饰一个变量通过赋值不同的常数或值来标识不同的状态。/**  * 可以通过布尔值来控制线程的启动和停止  */ public class MyThread extends Thread {          // 状态标志变量     private volatile boolean flag = true;          // 根据状态标志位来执行     public void run() {         while (flag) {             // do something         }     }     // 根据状态标志位来停止     public void stopThread() {         flag = false; // 改变状态标志变量     } }4.2 双重检查DLC
  在多线程编程下,一个对象可能会被多个线程同时访问和修改,而且这个对象可能会被重新创建或者赋值为另一个对象。此时可以通过 volatile 来修饰该变量,保证该变量的可见性和有序性。
  就如单例模式的双重检查DLC可以通过 volatile 来修饰从存储单例模式对象的变量。/**  * 单例模式的双重检查方式  */ public class Singleton {          // 使用volatile进行修饰     private static volatile Singleton instance;      // 私有化构造器     private Singleton() {}          // 双重检查锁     public static Singleton getInstance() {         if (instance == null){             synchronized (Singleton.class){                 if (instance == null){                     instance = new Singleton();                 }             }         }         return instance;     } }4.3 较低开销的读写锁
  使用 volatile 结合 synchronized 实现较低开销的读写锁,由于 volatile 可以保证变量的可见性和有序性,而 synchronized 可以保证变量的原子性和互斥性,可以结合使用实现较低开销的读写锁。/**  * 读写锁实现多线程下的计数器  */ public class VolatileSynchronizedCounter {     // volatile变量     private volatile int count = 0;     // synchronized方法     public synchronized void increment() {          count++; // 原子操作     }     public int getCount() {         return count;     } }
  使用 volatile 修饰变量,synchronized 修饰方法,这样 volatile 修饰变量具有可见性,写操作会被其他线程立刻可见,synchronized 修饰方法保证 count++ 操作的原子性和互斥性,这样实现的读写锁,读操作无锁,写操作有锁,降低了开销。

漫步故宫,不一样的体验因为工作原因,有机会从各个大门进入故宫。今天就把个人感受分享给大家。(用简单的图片说明吧)都知道故宫有4个门,即午门西华门东华门和神武门。我把他们称为南北东西4个大门。南门就是午门好消息!澳洲将开通更多飞往中国航班西澳州长MarkMcGowan宣布,他要将西澳打造成西部枢纽,大幅开通更多飞往印度日本和中国的航班。随着珀斯在新冠疫情后重新与世界建立联系,并且在澳航首个直飞罗马的航班开通之前,州乡村改造,这样设计才够惊艳!建筑美学与乡村的结合会碰撞出什么样的火花呢?精致宜居环境优美的乡村是人人都向往的今天崃仔就来分享一些国内美丽乡村建设案例吧田园东方二期无锡田园东方二期的建设,关注对基础设施建设与商放假通知!山西省部分中小学2022暑假时间敲定,家长这可咋办山西省,位于太行山以西因此得名山西,简称晋,古时也称河东。山西是中国古文明的发祥地之一,拥有悠久的历史,旅游资源也非常丰富,经常可以听到一句话来高度概括山西的旅游业华夏古文明,山西难忘318(二)大渡河泸定桥雅江到理塘135公里,用时3小时,世界高城理塘,海拔4100米国际小镇鲁郎,环境优美,有自驾游营地,鲁郎石锅鸡一定要品尝怒江,318线就在半山腰盘旋林芝号称西藏小江南,朝邑那座逝去的渭北古城在黄河西岸的黄河边,曾经有一座古老而辉煌的城池朝邑古城。尽管朝邑古城并不是因黄河而建,但是在漫长的历史长河中,是黄河让朝邑城演绎了一幕幕特有的故事,赋予了它灵魂,而最终也是因为黄河不负此山此村好景致太行深处的双庙村在豫西北的太行山深处,云台山之青龙峡与峰林峡景区的售票处西侧,座落着一个小山村双庙村。节期无聊,午后沿穿许河村的山路一路上山。这条山路依山势而修,弯急坡陡,蜿蜒曲折,是最初的旅游线湖南乡村旅游为啥又勇又二?还有救吗?怎么救?最近,把湖南14个地市的乡村旅游走马观花了一遍,非常感慨。虽然大伙不关心这玩意,但还是想写一下,希望对大伙有点参考价值。如果深入了解湖南,你很难做到不喜欢。因为这个盛产狠人水稻和美长安汽车只恨天高,旅游餐饮憧憬复苏时隔三个月,上证再度攻克3400,亢奋的汽车集团,光伏集团,憧憬复苏的旅游消费偏军,共同点燃了市场的做多热情。很多人会懵逼地问一句,今年14月的A股和今年56月的A股,到底哪个才是创建天府旅游名县摄哥拍隆昌影像隆昌春色撩人摄影黄世华春晓摄影李道银农家醉春意摄影周明跃春访九龙村摄影肖贵州小嘴村稻虾养殖基地摄影徐凯下载APP关注公众号隆昌融媒丨掌上云端心间新闻爆料08323951284广6月27日汇总北京多家景区恢复开放!交通运营有调整目前,北京多家景区交通运营有所调整,市民出行请注意。01hr景区运营调整1香山公园恢复开放。2国家植物园恢复开放。3玉渊潭公园恢复开放。4顺义奥林匹克水上公园恢复开园。5西山国家森每日学中药女贞子女贞子为木犀科乔木女贞的成熟果实,主产于浙江江苏湖南等地,冬季果实成熟时采收,稍蒸或置于沸水中略烫后,干燥,生用或酒制用。本品味甘苦,性凉,归肝肾经。具有补肝肾阴乌须明目之功效。临七种有趣方法提高孩子数学思维?幼儿园孩子数学思维逻辑推理自然技能动态想象的提高,其实就是孩子数学能力的提高。说到数学,很多家长认为是幼儿园小学,事实上,儿童数学是幼儿园五个领域科学的重要组成部分。不是让孩子做加有趣丨想和袋鼠Emu亲密接触?来这个可爱农场逛逛位于Kelowna的KangarooCreek农场,之前听说过很多次,也见到不少朋友去过,但是由于距离家有四个多小时车程,一直未去。这次玩完班夫Jasper公园,顺便去了这个超级可长城哈弗跟进停油,2030年完全停售油车8月22日,长城哈弗品牌新能源战略发布会举行,并宣告哈弗向新能源赛道全面转型,该品牌将在2030全面停产燃油车。2022年上半年,新能源汽车销量规模持续攀升,市场占有率达21。6,父母身高矮,孩子的身高也会十分矮小吗?根据科学研究表明,孩子的身高影响因素先天遗传因素占了70左右,而后天的影响因素则占了30左右,则会导致许多孩子看到自己父母的身高不理想,从而认为自己的身高也也会不理想但其实并不然,学前班或将面临取消?官方回应来了,小学老师喊苦没快乐了大家有没有见过家长把小朋友送到幼儿园,小朋友号啕大哭的场面呢?相信很多家长都会有这个烦恼,那就是小朋友上幼儿园如上战场,家长很难把他们送进幼儿园后安然脱身,很多家长都会在一开始的时美国撕开了遮羞布,台积电刘德音摊牌,张忠谋担心的情况出现点击关注,每天精彩不断!导读美国撕开了遮羞布,台积电刘德音摊牌,张忠谋担心的情况出现!众所周知,半导体芯片在整个科技领域起着至关重要的作用,因为半导体芯片产业涉及到了芯片的设计制造下周一,股市行情预判本周的股市基本上呈现出下跌的态势,只不过在跌幅上出现了一定的差别,那么,下周一,股市行情该如何运行呢?笔者认为,下周一,股市行情关键就在于三点。第一,900日均线能否起到支撑的效果好的进化是浓缩了解纯电新能源零跑T03产品本身的不断进步,身份角色的不断转变,让纯电动汽车在zui近五年间的变化,翻天覆地。品类越发丰富,续航直线提升,车辆的造型也脱离开了中国汽车市场一贯秉承中庸味道,变得更加前卫时尚销量大涨4倍的吉利新能源,下半年势头会更猛出品何玺排版叶媛8月18日,吉利汽车公布了2022年上半年财报。数据显示,吉利各项核心指标均显示出良好发展趋势。值得一提的是,2022上半年吉利新能源汽车销量大涨4倍,是国产品牌中七百万年前,乍得人猿用两只脚迈出了第一步有证据表明,这种类似人类的物种直立行走。对萨赫勒人如何移动的艺术诠释。一项新的研究发现,已知的最古老的类人物种可能是在700万年前用两条腿行走的,这一发现揭示了人类与类人猿的最初区
三国杀玩家个个都是人才,说话幽默又有文化,评论区一片和谐大家好,我是戎马定半生。不知从何时起,三国杀移动版这款游戏的评价就直线下跌。浓厚的中国风应该得到玩家喜爱,但没想到竟然如此。所以我深入评论区,看看玩家的眼中三国杀是什么样子,一看不八极拳能不能参加擂台搏击比赛?能不能参加擂台搏击比赛,其实需要从两个方面来进行分析?一是练八极拳的能不能参加擂台搏击比赛?二是八极拳的技术能不能应用于擂台搏击比赛?毛泽东同志在矛盾论中说马克思主义最本质的东西,至今不娶妻的9位香港大龄男星,多人情史复杂,最大62岁最小42岁文九爷编辑孙大圣娱乐圈明星们的故事一直备受大众的关注,是大众茶余饭后的谈资。在关注的内容方面,又属明星们的感情故事关注度最高,比如结婚隐婚离婚未婚生子等内容。今天我们就来聊一聊9位三级女王邱淑贞,23岁一脱成名后才发现,成也王晶,败也王晶邱淑贞是无数80后记忆中的女神,在嫁人多年后依旧让众多宅男念念不忘。然而这个看似完美的女神她一生不可逃避的问题就是出演过王晶的电影。在当年的香港,鬼才导演王晶的手下诞生过无数的三级2017年水泥妹卖惨走红,被揭穿后丈夫与她离婚,如今已销声匿迹狄更斯说,这是最好的时代,这是最坏的时代,在这个信息爆炸流量爆炸的时代,一夜爆红成为了极其常见的事,生活中很多普通人,都靠着互联网成为了大家眼中的网红。如今网红走红的方式也是五花八资本大鳄王冉51岁娶小17岁童瑶,余生要为娇妻遮风挡雨2021年,童瑶拿下上海白玉兰奖。颁奖典礼顺利举行完毕后,很多人都会有一个疑问,那就是怎么是童瑶?从网友的投票来看,童瑶绝对不是最受欢迎的。但是,最后的白玉兰就是落到她的手里。自从天生苦相的9位女明星,个个愁容满面,个个星途坎坷,真玄学娱乐圈里的女明星,个个貌美如花,明艳动人,但是命运却完全不同。这些差别和个人的机遇能力资源都有关系,也和长相有密不可分的关系。有的女明星长相自带观众缘,看起来舒服,有的女明星一脸苦魅影缝匠爱他,就给他下毒魅影缝匠是保罗托马斯安德森(PTA)导演,丹尼尔戴刘易斯(DDL)和薇姬克里普斯主演的一部爱情片,电影于2018年在美国上映,被提名为第90届奥斯卡最佳影片。故事发生在20世纪50闫学晶与林越离婚11年,她嫁神秘富商生女,他三婚娶小20岁娇妻闫学晶是观众喜爱的喜剧演员,和二人转表演艺术家。2001年,在乡村题材剧刘老根中,饰演刘老根的女儿山杏,从而走入广大电视观众视野。此后她相继出演了小姨多鹤俺娘田小草和妈妈一起恋爱越0906游戏资讯育碧公布了刺客信条新作刺客信条幻景头条群星8月榜育碧正式公布了刺客信条系列新作的名字刺客信条幻景,并随之发布了一张概念宣传图,看上去和之前网络上爆料的中东背景相符合,并且主角与前作英灵殿中的巴辛姆极为相似。据爆料称何为恋童癖?这些人渣心理究竟多变态?网友太揪心了恋童癖是指利用未成年满足自己性需求的偏好,尤其未完全发育的幼儿,多发生在熟人之间。恋童癖概念于19世纪诞生,是当下非常重要的伦理话题,也是站在舆论中间的性教育热潮。我国法律特别指出花最多的钱,挨最毒的打!切尔西英超稀烂,欧冠开门黑北京时间9月7日凌晨,欧冠小组赛首轮一场比赛,英超豪门切尔西客场挑战克罗地亚劲旅萨格勒布迪纳摩,结果切尔西01敌对手,遭遇欧冠开门黑。本场比赛新转会的奥巴梅杨首发出场,与斯特林和哈华为mate50正式发布!花粉们买不买9月6号华为mate50系列正式发布了,以下是各版本手机价格。华为Mate50系列发布3999元起Mate50E(骁龙778G)8GB128GB3999元8GB256GB4499元姜祥佑效力国安的薪水是在韩国期间的两倍,谢峰下课后我哭了国安的韩国外援姜祥佑近期接受了韩国媒体的采访,在采访中,姜祥佑透露,自己目前的薪水是在韩国踢球时的两倍,而当初力主引进姜祥佑的谢峰下课后,姜祥佑前去送行时流泪了。姜祥佑年初从浦项制6轮0球!亚洲一哥状态下滑退步明显,恐为5800万欧巴西神锋让位新赛季前面6轮英超战罢,托特纳姆热刺4胜2平,积14分,暂时排在英超积分榜的第3位。应该说,热刺在意大利名帅孔蒂麾下,已经渐入佳境,本赛季有希望成为英超争冠的搅局者。在热刺阵中,当重要赛事前不顾郎平挽留,被国家队永久除名,王怡出逃的真相浮出上个世纪80年代的女排王怡,相信老一代的球迷都认识她。临重要赛事前放弃比赛,悄然逃去美国,叛出师门,就连郎平接受采访时,都没有控制住情绪,声泪俱下指责她的行为,直言永远被国家队除名如果不敢直面死亡,算什么硬汉!来见识一下世界上最危险的摩托车比赛吧曼岛摩托车计时赛(IsleofManTT)被称为世界上最危险的比赛,这个在英国小岛曼岛举行的年度赛事,举行101届以来只有一届没有骑手死亡。费德勒错过一个球会丢一分,而我错过一个弯华为Mate50Pro跑分现身!芯片频率与骁龙8一致,不是骁龙8?明天就是华为Mate50系列正式发布的日子了,虽然近段时间里,华为官方预热了不少新机的信息,但最受网友关心的芯片仍然非常神秘,目前只知道搭载高通代号为SM8425的芯片,而该芯片实这款真我GT2大师探索版手机,年度质感旗舰?哈喽,大家好,本期我们要讲解的是这款真我GT2大师探索版手机。屏幕方面采用一块6。7英寸OLED中置挖孔屏,分辨率2412乘1080,支持120赫兹刷新率和360赫兹触控采样率,三魔兽WLK风暴来临,前夕首个封号潮,奥山挂机封号30天巫妖王之怒还有接近三周的时间才会正式上线,前夕阶段的玩家正在奥山刷得不亦乐乎。从TBC开始,每次版本的更新,奥山战场都是核心内容,但还有个相同的场景再现,就是玩家每次在热衷刷奥山的二十四节气养生白露养生白露时节温差较大,早晚气温低,而正午气温偏高,此节气阴气渐重,露凝成型,附着在枝叶或花瓣上,经晨光折射呈亮晶晶的白色,故名白露,这是一个富有诗意的名字。在这个早晚温差大,雨水少,空吃得少,活得久?饭量小的人或更易长寿?是真相还是伪科学?人是铁,饭是钢,一顿不吃饿得慌!从古至今,人们以养成一日三餐的习惯,而且每个人的饭量是不同的,而且对那些本身体型偏胖的人,他们的饭量也比较大,而那些比较瘦的人可能因为挑食,所以饭量