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

高并发深度解析ScheduledThreadPoolExecutor类的源代码

  在【高并发专题】的专栏中,我们深度分析了ThreadPoolExecutor类的源代码,而ScheduledThreadPoolExecutor类是ThreadPoolExecutor类的子类。今天我们就来一起手撕ScheduledThreadPoolExecutor类的源代码。  构造方法
  我们先来看下ScheduledThreadPoolExecutor的构造方法,源代码如下所示。  public ScheduledThreadPoolExecutor(int corePoolSize) {  super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue()); }  public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory) {  super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,     new DelayedWorkQueue(), threadFactory); }  public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler) {  super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,     new DelayedWorkQueue(), handler); }  public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler) {  super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,     new DelayedWorkQueue(), threadFactory, handler); }
  从代码结构上来看,ScheduledThreadPoolExecutor类是ThreadPoolExecutor类的子类,ScheduledThreadPoolExecutor类的构造方法实际上调用的是ThreadPoolExecutor类的构造方法。  schedule方法
  接下来,我们看一下ScheduledThreadPoolExecutor类的schedule方法,源代码如下所示。  public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {  //如果传递的Runnable对象和TimeUnit时间单位为空  //抛出空指针异常  if (command == null || unit == null)   throw new NullPointerException();  //封装任务对象,在decorateTask方法中直接返回ScheduledFutureTask对象  RunnableScheduledFuture<?> t = decorateTask(command, new ScheduledFutureTask(command, null, triggerTime(delay, unit)));  //执行延时任务  delayedExecute(t);  //返回任务  return t; }  public  ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit)   //如果传递的Callable对象和TimeUnit时间单位为空  //抛出空指针异常  if (callable == null || unit == null)   throw new NullPointerException();  //封装任务对象,在decorateTask方法中直接返回ScheduledFutureTask对象  RunnableScheduledFuture t = decorateTask(callable,   new ScheduledFutureTask(callable, triggerTime(delay, unit)));  //执行延时任务  delayedExecute(t);  //返回任务  return t; }
  从源代码可以看出,ScheduledThreadPoolExecutor类提供了两个重载的schedule方法,两个schedule方法的第一个参数不同。可以传递Runnable接口对象,也可以传递Callable接口对象。在方法内部,会将Runnable接口对象和Callable接口对象封装成RunnableScheduledFuture对象,本质上就是封装成ScheduledFutureTask对象。并通过delayedExecute方法来执行延时任务。
  在源代码中,我们看到两个schedule都调用了decorateTask方法,接下来,我们就看看decorateTask方法。  decorateTask方法
  decorateTask方法源代码如下所示。  protected  RunnableScheduledFuture decorateTask(Runnable runnable, RunnableScheduledFuture task) {  return task; }  protected  RunnableScheduledFuture decorateTask(Callable callable, RunnableScheduledFuture task) {  return task; }
  通过源码可以看出decorateTask方法的实现比较简单,接收一个Runnable接口对象或者Callable接口对象和封装的RunnableScheduledFuture任务,两个方法都是将RunnableScheduledFuture任务直接返回。在ScheduledThreadPoolExecutor类的子类中可以重写这两个方法。
  接下来,我们继续看下scheduleAtFixedRate方法。  scheduleAtFixedRate方法
  scheduleAtFixedRate方法源代码如下所示。  public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {  //传入的Runnable对象和TimeUnit为空,则抛出空指针异常  if (command == null || unit == null)   throw new NullPointerException();  //如果执行周期period传入的数值小于或者等于0  //抛出非法参数异常  if (period <= 0)   throw new IllegalArgumentException();  //将Runnable对象封装成ScheduledFutureTask任务,  //并设置执行周期  ScheduledFutureTask sft =   new ScheduledFutureTask(command, null, triggerTime(initialDelay, unit), unit.toNanos(period));  //调用decorateTask方法,本质上还是直接返回ScheduledFutureTask对象  RunnableScheduledFuture t = decorateTask(command, sft);  //设置执行的任务  sft.outerTask = t;  //执行延时任务  delayedExecute(t);  //返回执行的任务  return t; }
  通过源码可以看出,scheduleAtFixedRate方法将传递的Runnable对象封装成ScheduledFutureTask任务对象,并设置了执行周期,下一次的执行时间相对于上一次的执行时间来说,加上了period时长,时长的具体单位由TimeUnit决定。采用固定的频率来执行定时任务。
  ScheduledThreadPoolExecutor类中另一个定时调度任务的方法是scheduleWithFixedDelay方法,接下来,我们就一起看看scheduleWithFixedDelay方法。  scheduleWithFixedDelay方法
  scheduleWithFixedDelay方法的源代码如下所示。  public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) {  //传入的Runnable对象和TimeUnit为空,则抛出空指针异常  if (command == null || unit == null)   throw new NullPointerException();  //任务延时时长小于或者等于0,则抛出非法参数异常  if (delay <= 0)   throw new IllegalArgumentException();  //将Runnable对象封装成ScheduledFutureTask任务  //并设置固定的执行周期来执行任务  ScheduledFutureTask sft =   new ScheduledFutureTask(command, null,triggerTime(initialDelay, unit), unit.toNanos(-delay));  //调用decorateTask方法,本质上直接返回ScheduledFutureTask任务  RunnableScheduledFuture t = decorateTask(command, sft);  //设置执行的任务  sft.outerTask = t;  //执行延时任务  delayedExecute(t);  //返回任务  return t; }
  从scheduleWithFixedDelay方法的源代码,我们可以看出在将Runnable对象封装成ScheduledFutureTask时,设置了执行周期,但是此时设置的执行周期与scheduleAtFixedRate方法设置的执行周期不同。此时设置的执行周期规则为:下一次任务执行的时间是上一次任务完成的时间加上delay时长,时长单位由TimeUnit决定。也就是说,具体的执行时间不是固定的,但是执行的周期是固定的,整体采用的是相对固定的延迟来执行定时任务。
  如果大家细心的话,会发现在scheduleWithFixedDelay方法中设置执行周期时,传递的delay值为负数,如下所示。  ScheduledFutureTask sft =   new ScheduledFutureTask(command, null, triggerTime(initialDelay, unit), unit.toNanos(-delay));
  这里的负数表示的是相对固定的延迟。
  在ScheduledFutureTask类中,存在一个setNextRunTime方法,这个方法会在run方法执行完任务后调用,这个方法更能体现scheduleAtFixedRate方法和scheduleWithFixedDelay方法的不同,setNextRunTime方法的源码如下所示。  private void setNextRunTime() {  //距离下次执行任务的时长  long p = period;  //固定频率执行,  //上次执行任务的时间  //加上任务的执行周期  if (p > 0)   time += p;  //相对固定的延迟  //使用的是系统当前时间  //加上任务的执行周期  else   time = triggerTime(-p); }
  在setNextRunTime方法中通过对下次执行任务的时长进行判断来确定是固定频率执行还是相对固定的延迟。  triggerTime方法
  在ScheduledThreadPoolExecutor类中提供了两个triggerTime方法,用于获取下一次执行任务的具体时间。triggerTime方法的源码如下所示。  private long triggerTime(long delay, TimeUnit unit) {  return triggerTime(unit.toNanos((delay < 0) ? 0 : delay)); }  long triggerTime(long delay) {  return now() +   ((delay < (Long.MAX_VALUE >> 1)) ? delay : overflowFree(delay)); }
  这两个triggerTime方法的代码比较简单,就是获取下一次执行任务的具体时间。有一点需要注意的是:delay < (Long.MAX_VALUE >> 1判断delay的值是否小于Long.MAX_VALUE的一半,如果小于Long.MAX_VALUE值的一半,则直接返回delay,否则需要处理溢出的情况。
  我们看到在triggerTime方法中处理防止溢出的逻辑使用了overflowFree方法,接下来,我们就看看overflowFree方法的实现。  overflowFree方法
  overflowFree方法的源代码如下所示。  private long overflowFree(long delay) {  //获取队列中的节点  Delayed head = (Delayed) super.getQueue().peek();  //获取的节点不为空,则进行后续处理  if (head != null) {   //从队列节点中获取延迟时间   long headDelay = head.getDelay(NANOSECONDS);   //如果从队列中获取的延迟时间小于0,并且传递的delay   //值减去从队列节点中获取延迟时间小于0   if (headDelay < 0 && (delay - headDelay < 0))    //将delay的值设置为Long.MAX_VALUE + headDelay    delay = Long.MAX_VALUE + headDelay;  }  //返回延迟时间  return delay; }
  通过对overflowFree方法的源码分析,可以看出overflowFree方法本质上就是为了限制队列中的所有节点的延迟时间在Long.MAX_VALUE值之内,防止在ScheduledFutureTask类中的compareTo方法中溢出。
  ScheduledFutureTask类中的compareTo方法的源码如下所示。  public int compareTo(Delayed other) {  if (other == this) // compare zero if same object   return 0;  if (other instanceof ScheduledFutureTask) {   ScheduledFutureTask<?> x = (ScheduledFutureTask<?>)other;   long diff = time - x.time;   if (diff < 0)    return -1;   else if (diff > 0)    return 1;   else if (sequenceNumber < x.sequenceNumber)    return -1;   else    return 1;  }  long diff = getDelay(NANOSECONDS) - other.getDelay(NANOSECONDS);  return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; }
  compareTo方法的主要作用就是对各延迟任务进行排序,距离下次执行时间靠前的任务就排在前面。  delayedExecute方法
  delayedExecute方法是ScheduledThreadPoolExecutor类中延迟执行任务的方法,源代码如下所示。  private void delayedExecute(RunnableScheduledFuture<?> task) {  //如果当前线程池已经关闭  //则执行线程池的拒绝策略  if (isShutdown())   reject(task);  //线程池没有关闭  else {   //将任务添加到阻塞队列中   super.getQueue().add(task);   //如果当前线程池是SHUTDOWN状态   //并且当前线程池状态下不能执行任务   //并且成功从阻塞队列中移除任务   if (isShutdown() &&    !canRunInCurrentRunState(task.isPeriodic()) &&    remove(task))    //取消任务的执行,但不会中断执行中的任务    task.cancel(false);   else    //调用ThreadPoolExecutor类中的ensurePrestart()方法    ensurePrestart();  } }
  可以看到在delayedExecute方法内部调用了canRunInCurrentRunState方法,canRunInCurrentRunState方法的源码实现如下所示。  boolean canRunInCurrentRunState(boolean periodic) {  return isRunningOrShutdown(periodic ? continueExistingPeriodicTasksAfterShutdown : executeExistingDelayedTasksAfterShutdown); }
  可以看到canRunInCurrentRunState方法的逻辑比较简单,就是判断线程池当前状态下能够执行任务。
  另外,在delayedExecute方法内部还调用了ThreadPoolExecutor类中的ensurePrestart()方法,接下来,我们看下ThreadPoolExecutor类中的ensurePrestart()方法的实现,如下所示。  void ensurePrestart() {  int wc = workerCountOf(ctl.get());  if (wc < corePoolSize)   addWorker(null, true);  else if (wc == 0)   addWorker(null, false); }
  在ThreadPoolExecutor类中的ensurePrestart()方法中,首先获取当前线程池中线程的数量,如果线程数量小于corePoolSize则调用addWorker方法传递null和true,如果线程数量为0,则调用addWorker方法传递null和false。
  关于addWork()方法的源码解析,大家可以参考【高并发专题】中的《高并发之——通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程》一文,这里,不再赘述。  reExecutePeriodic方法
  reExecutePeriodic方法的源代码如下所示。  void reExecutePeriodic(RunnableScheduledFuture<?> task) {  //线程池当前状态下能够执行任务  if (canRunInCurrentRunState(true)) {   //将任务放入队列   super.getQueue().add(task);   //线程池当前状态下不能执行任务,并且成功移除任务   if (!canRunInCurrentRunState(true) && remove(task))    //取消任务    task.cancel(false);   else    //调用ThreadPoolExecutor类的ensurePrestart()方法    ensurePrestart();  } }
  总体来说reExecutePeriodic方法的逻辑比较简单,但是,这里需要注意和delayedExecute方法的不同点:调用reExecutePeriodic方法的时候已经执行过一次任务,所以,并不会触发线程池的拒绝策略;传入reExecutePeriodic方法的任务一定是周期性的任务。  onShutdown方法
  onShutdown方法是ThreadPoolExecutor类中的钩子函数,它是在ThreadPoolExecutor类中的shutdown方法中调用的,而在ThreadPoolExecutor类中的onShutdown方法是一个空方法,如下所示。  void onShutdown() { }
  ThreadPoolExecutor类中的onShutdown方法交由子类实现,所以ScheduledThreadPoolExecutor类覆写了onShutdown方法,实现了具体的逻辑,ScheduledThreadPoolExecutor类中的onShutdown方法的源码实现如下所示。  @Override void onShutdown() {  //获取队列  BlockingQueue q = super.getQueue();  //在线程池已经调用shutdown方法后,是否继续执行现有延迟任务  boolean keepDelayed = getExecuteExistingDelayedTasksAfterShutdownPolicy();  //在线程池已经调用shutdown方法后,是否继续执行现有定时任务  boolean keepPeriodic = getContinueExistingPeriodicTasksAfterShutdownPolicy();  //在线程池已经调用shutdown方法后,不继续执行现有延迟任务和定时任务  if (!keepDelayed && !keepPeriodic) {   //遍历队列中的所有任务   for (Object e : q.toArray())    //取消任务的执行    if (e instanceof RunnableScheduledFuture<?>)     ((RunnableScheduledFuture<?>) e).cancel(false);   //清空队列   q.clear();  }  //在线程池已经调用shutdown方法后,继续执行现有延迟任务和定时任务  else {   //遍历队列中的所有任务   for (Object e : q.toArray()) {    //当前任务是RunnableScheduledFuture类型    if (e instanceof RunnableScheduledFuture) {     //将任务强转为RunnableScheduledFuture类型     RunnableScheduledFuture<?> t = (RunnableScheduledFuture<?>)e;     //在线程池调用shutdown方法后不继续的延迟任务或周期任务     //则从队列中删除并取消任务     if ((t.isPeriodic() ? !keepPeriodic : !keepDelayed) ||      t.isCancelled()) {      if (q.remove(t))       t.cancel(false);     }    }   }  }  //最终调用tryTerminate()方法  tryTerminate(); }
  ScheduledThreadPoolExecutor类中的onShutdown方法的主要逻辑就是先判断线程池调用shutdown方法后,是否继续执行现有的延迟任务和定时任务,如果不再执行,则取消任务并清空队列;如果继续执行,将队列中的任务强转为RunnableScheduledFuture对象之后,从队列中删除并取消任务。大家需要好好理解这两种处理方式。最后调用ThreadPoolExecutor类的tryTerminate方法。有关ThreadPoolExecutor类的tryTerminate方法的源码解析,大家可以参考【高并发专题】中的《高并发之——通过源码深度分析线程池中Worker线程的执行流程》一文,这里不再赘述。
  至此,ScheduledThreadPoolExecutor类中的核心方法的源代码,我们就分析完了。

油价调整信息今天3月15号,国内加油站调整后9295号汽油价格今天是2022年3月15日星期二,国内成品油预计调整幅度仍旧处于正值运行,各位车主要小心油价上涨了。国际原油期货下跌,跌幅在2。9美元桶左右。WTI盘中最高触及104。77美元桶,今日油价调整信息3月14日调整后,全国9295汽油价格最新售价表今日最新油价调整今天是3月14日,星期一。油价要连涨6次,本周油价又要创高了从2021年末至今,油价已经连涨5次,而新一轮油价的十个工作日统计周期已经进行到第7个工作日,预计油价上奋进虎年虎力全开,为何近期中国最耀眼的省份是湖北?湖北自从2019年年底2020年年初开始,新冠病毒已经在全球肆虐已有两年多时间了,且至今仍然没有消散的迹象,而全国受到新冠影响最严重的地区,无疑就是湖北了。而根据近期国家发布的,关对未来十年房地产行业的推演先说结论,如果下面的推演没有问题,那么到2030年,中国房地产市场将累计新增128。3亿平方米的住房面积,累计销售金额143。2万亿。下面是整个推演的完整过程2016年12月30日居民中长期贷款历史首次负增长,楼市还要加大剂量奶一奶2月经济数据出炉,新增人民币贷款1。23万亿,不及市场预期,中断了1月开启的信贷复苏态势。从结构来看,短期贷款与票据融资继续发挥支撑作用,信贷结构恶化情况并没有缓解。分部门来看,企明天这些板块大概率这样走白酒,医药,新能源今天来看三大指数恐慌性下跌,似乎由于是战争的影响,但总体来看还是属于内在基本面因素,三大指数上涨已经连续两两年,现在已经出现上涨无力的态势,所以将会开启深度回调探底行情。板块方面来10个关于成长的句子,清醒且透彻见字第1044期01hr如果你只读每个人都在读的书,你也只能想到每个人都能想到的事。02hr在人间挑选属于自己的颜色,去追那只风筝,去做你想做的人。03hr成长很大一部分是接受,接散文时光雅静,带来春天的爱恋作者子墨活着就是活一种心情,人生过的就是一种心境,简单快乐随缘,随心,也就看清了人生起落,浮生风雨,懂得珍惜和拥有,万事随缘,才能看见岁月花开。题记三月,春风吹乱了思绪,凌乱了一场优美的句子(30)一个好的东西往往是说不清楚的,说得清楚的往往不是好东西。马云我不需要任何人来反驳我,我本身就足以反驳我自己。尼采人性的太人性的早晨的最大好处,是让我们知道今天能从头开始。生活不是为年轮梁晓声,饥饿的记忆,还没有远到遗忘的地步年轮梁晓声,饥饿的记忆,还没有远到遗忘的地步看完这本书,我的心情久久不能平复。对于德保的死很震惊,那么善良,有责任的一个人就这样离开了爱他的家人,朋友,真的很可惜。我感动于徐克,吴最近哪一段比较治愈你?一点文艺与美好。1。hr我会在冬日最后的一场雪结束后动身沿途采撷凛冬散去后初发的绿意在春雷响时抵达你身旁把冬天遗落在后将春天作为伴手礼献于你那便是我一生的迁徙。这句真的太美了,适合
勇士这是最坏的时候,这是最好的时候今天阵容周五晚上勇士败给鹈鹕后,战绩来到了3胜7负,排名西部第十二。上次勇士四连败还要追溯到20年前了,这个赛季截止至今,只有魔术篮网活塞火箭和勇士输了6场以上,即使开局最糟糕的湖凯尔特人两周观察内线缺人导致防守崩盘杰伦抢戏马祖拉还太嫩大家好,我是183蒙面男子。新赛季NBA常规赛已经开打两周多,各队都打了89场左右的比赛,有些问题已经浮出水面,针对一些热门球队,咱们来好好聊聊,这期先来说凯尔特人。绿军前3场比赛特雷杨3410默里三双老鹰加时险胜鹈鹕鹈鹕数据(54)CJ麦科勒姆29分10篮板蔡恩威廉森29分8篮板4助攻赫伯特琼斯19分9篮板3抢断布兰登英格拉姆16分5篮板7助攻2封盖约纳斯瓦兰丘纳斯13分17篮板小拉里南斯8分碾压大胜!布克2433,艾顿76,保罗越老越妖,这才是狂野西部北京时间11月6日,NBA常规赛太阳主场迎战开拓者,两队不久前曾交过手,当时格兰特绝杀了太阳,显然太阳此役的目标就是复仇。首发阵容方面,太阳为保罗布克布里奇斯克雷格和艾顿,开拓者则北影节红毯众星纷纷亮相,陈都灵甜美,张天爱惊艳,邓家佳太意外都说红毯是娱乐圈女明星的照妖镜,这话一点都不假。图片来源于网络8月12日,第十二届北京国际电影节开幕式在北京举行,众星纷纷亮相红毯。图片来源于网络齐溪丸子头搭配一袭深v网格水晶礼服北京电影节李一桐李宇春张天爱邓家佳马苏秦海璐许魏洲丁程鑫1。时代少年团1hr2hr3hr4hr5hr6hr7hr很多人都认不出谁是谁吧?我只能认得出来丁程鑫,但他不是最帅的!你们觉得第几个最帅?2。李一桐很多人说她是资源咖,不过她依然是36届百花奖红毯造型,王牌姐妹成焦点,邓家佳最有味道36届百花奖,除了颁奖典礼,还有一个重要的环节那就是明星走红毯这次,红毯造型最出彩的是哪位呢?先来看看两位百花奖主持人的着装,佟丽娅一袭白色礼服长裙简单不失大气搭配简单珍珠耳环及披演员邓家佳结婚十年和平分手,离婚三年,事业爱情双丰收近日,凭借爱情公寓走红的女星邓家佳,可谓是事业爱情双得意。2022年的这个夏天,她主演的回廊亭通天塔致勇敢的你匆匆的青春4部剧,相继在各大平台播出。粉丝们都忍不住在网上留言称,这个霸屏女王秦岚邓家佳新剧即将开播,单亲妈妈的复仇,爽剧看点足传家关于唐医生的一切,秦岚近期新戏不断。回廊亭通天塔致勇敢的你匆匆的青春,邓家佳今年更是开闸放库存剧,新剧一部接一部。霸屏女王秦岚和邓家佳竟然也有合作,新戏灿烂的转身(原名她们的反年过三十演学生,把邓家佳跟张佳宁放一起,差别出来了乔家的儿女被称为乔家五个倒霉蛋的故事,这一大家子都是各有各的难处与心酸。乔大哥人到中年患了病,乔四美年纪轻轻就看上了渣男,为了他差点连命都没了。而最小的孩子乔七七,出生就没了妈,还邓家佳,与前夫熬过了毕业季,熬过了异国恋,却没熬过婚姻的5年文Di编辑小情书去年,悬疑喜剧电影扬名立万上映,邓家佳在片中饰演的苏梦蝶有一个场景给不少人留下了很深的印象身穿旗袍,曼妙身姿,浓艳红唇的苏梦蝶,优雅落寞的对众人说一个小姑娘,想要站我想暂时退出国家队埃格努背锅世锦赛成绩遭种族歧视女排世锦赛上周顺利落幕,今年斩获世界女排联赛首冠的意大利女排,最终在世锦赛上获得季军。不料队内场场得分最高的王牌接应埃格努不断受到网络攻击,让她在颁奖典礼后崩溃地说,我累了,这是我按最佳阵容的标准中国女排还少些什么世锦赛回顾之三排球星空,与你分享排球资讯与快乐。2022年女排世锦赛最佳阵容与2018年世锦赛相比,本届最佳阵容保留了博斯科维奇和塞拉,其他位置均换成了新面孔。从最佳的成色看基本名副其实,但也有樊振东遗憾!王楚钦遗憾!国乒头号劲敌惨败,刘国梁惋惜球迷失落北京时间10月21日,WTT澳门冠军赛激战正酣,各国的乒乓球选手正在激烈的角逐之中,其中大家关注度非常高的男单冠军之争也是非常激烈,因为在此前的十六分之一决赛中,国乒男队提前上演了AAX成为2022年越南区块链峰会金牌赞助商全球数字资产交易所AAX于10月19日至20日作为金牌赞助商参加2022年越南区块链峰会(VBS),这是越南迄今为止所举办的最大的区块链活动。lAAX推出2022年卡塔尔世界杯足球跳水世界杯中国队收获两项冠军,全红婵陈芋汐女双10米台登顶北京时间10月21日,2022年跳水世界杯在德国柏林继续进行,中国队拿到两项冠军。练俊杰杨昊在男子双人10米跳台比赛虽有失误,但他们的领先优势非常明显,一路领跑夺冠。在女子双人10排华?不友好?在印尼做生意要注意什么?提到印尼,第一反应就是两次的排华运动,以及这两次排华运动所做出的一些暴行。但随着经济全球化的不断深入跟一带一路的深度发展,如今两国的关系也越来越密切。那么在印尼做生意是一种什么体验王健林提前卖资产降低负债,是否有高人指点?他说是自己聪明而已如今的地产江湖,真的是哀鸿遍野。恒大倒下,融创富力等公司也是岌岌可危。碧桂园的市值已经跌到了300多亿。纵观国内的地产大佬,目前日子最好过的就是王健林了。王健林如今是无债一身轻,万中银基金亮眼三季报背后的规模隐忧作者李海霞编辑付影来源独角金融含着金汤匙出生,银行系基金公司被视为行业中的富二代。所谓打江山易,守江山难。背靠大树,银行系基金公司有着资金客户等诸多先天优势,把规模做起来并非难事。天才少年茅侃侃23岁身家6000万,成为创业偶像,12年后自杀身亡在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论和分享,又能给您带来不一样的参与感,感谢您的支持茅侃侃高中辍学,到了23岁时身价超过了6000万,他独特的创业之路受到了社会的广前9月五大上市险企总揽保费2。12万亿元,财险延续高增长,寿险新业务价值有望回暖A股五大上市险企今年前9个月原保险保费收入情况发布完毕。10月20日,北京商报记者梳理发现,今年前9个月,五大上市险企共取得保费收入约2。12万亿元,同比增长4。整体来看,五大险企犹太人说给自己留条后路,驰骋商界的犹太民族又是怎样做到的呢?犹太商人有一句名言不要把所有的鸡蛋放在同一个篮子里。这是犹太商人分散风险的重要法则,即采取防患于未然的经营策略,量力而行,要最大限度地预防降低商业风险,避免遭遇一损俱损的投资后果。