index.html 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
  6. <meta name="theme-color" content="#222">
  7. <meta name="generator" content="Hexo 5.4.0">
  8. <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  9. <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  10. <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  11. <link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#222">
  12. <meta name="google-site-verification" content="cCGIgodGvlMoVATcXs4p7kl8BVhmqW8u1kcPBZfD2qw">
  13. <link rel="stylesheet" href="/css/main.css">
  14. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext">
  15. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.2/css/all.min.css">
  16. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.1.1/animate.min.css">
  17. <script class="hexo-configurations">
  18. var NexT = window.NexT || {};
  19. var CONFIG = {"hostname":"blog.izhixing.icu","root":"/","images":"/images","scheme":"Gemini","version":"8.2.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":false,"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}};
  20. </script>
  21. <meta name="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  22. <meta property="og:type" content="website">
  23. <meta property="og:title" content="知行">
  24. <meta property="og:url" content="https://blog.izhixing.icu/index.html">
  25. <meta property="og:site_name" content="知行">
  26. <meta property="og:description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  27. <meta property="og:locale" content="zh_CN">
  28. <meta property="article:author" content="知行">
  29. <meta name="twitter:card" content="summary">
  30. <link rel="canonical" href="https://blog.izhixing.icu/">
  31. <script class="page-configurations">
  32. // https://hexo.io/docs/variables.html
  33. CONFIG.page = {
  34. sidebar: "",
  35. isHome : true,
  36. isPost : false,
  37. lang : 'zh-CN'
  38. };
  39. </script>
  40. <title>知行</title>
  41. <script async src="https://www.googletagmanager.com/gtag/js?id=UA-135887327-1"></script>
  42. <script>
  43. if (CONFIG.hostname === location.hostname) {
  44. window.dataLayer = window.dataLayer || [];
  45. function gtag(){dataLayer.push(arguments);}
  46. gtag('js', new Date());
  47. gtag('config', 'UA-135887327-1');
  48. }
  49. </script>
  50. <noscript>
  51. <style>
  52. body { margin-top: 2rem; }
  53. .use-motion .menu-item,
  54. .use-motion .sidebar,
  55. .use-motion .post-block,
  56. .use-motion .pagination,
  57. .use-motion .comments,
  58. .use-motion .post-header,
  59. .use-motion .post-body,
  60. .use-motion .collection-header {
  61. visibility: visible;
  62. }
  63. .use-motion .header,
  64. .use-motion .site-brand-container .toggle,
  65. .use-motion .footer { opacity: initial; }
  66. .use-motion .site-title,
  67. .use-motion .site-subtitle,
  68. .use-motion .custom-logo-image {
  69. opacity: initial;
  70. top: initial;
  71. }
  72. .use-motion .logo-line {
  73. transform: scaleX(1);
  74. }
  75. .search-pop-overlay, .sidebar-nav { display: none; }
  76. .sidebar-panel { display: block; }
  77. </style>
  78. </noscript>
  79. </head>
  80. <body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  81. <div class="headband"></div>
  82. <main class="main">
  83. <header class="header" itemscope itemtype="http://schema.org/WPHeader">
  84. <div class="header-inner"><div class="site-brand-container">
  85. <div class="site-nav-toggle">
  86. <div class="toggle" aria-label="切换导航栏" role="button">
  87. <span class="toggle-line"></span>
  88. <span class="toggle-line"></span>
  89. <span class="toggle-line"></span>
  90. </div>
  91. </div>
  92. <div class="site-meta">
  93. <a href="/" class="brand" rel="start">
  94. <i class="logo-line"></i>
  95. <h1 class="site-title">知行</h1>
  96. <i class="logo-line"></i>
  97. </a>
  98. </div>
  99. <div class="site-nav-right">
  100. <div class="toggle popup-trigger">
  101. <i class="fa fa-search fa-fw fa-lg"></i>
  102. </div>
  103. </div>
  104. </div>
  105. <nav class="site-nav">
  106. <ul class="main-menu menu">
  107. <li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li>
  108. <li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a></li>
  109. <li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a></li>
  110. <li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li>
  111. <li class="menu-item menu-item-sitemap"><a href="/sitemap.xml" rel="section"><i class="fa fa-sitemap fa-fw"></i>站点地图</a></li>
  112. <li class="menu-item menu-item-search">
  113. <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
  114. </a>
  115. </li>
  116. </ul>
  117. </nav>
  118. <div class="search-pop-overlay">
  119. <div class="popup search-popup"><div class="search-header">
  120. <span class="search-icon">
  121. <i class="fa fa-search"></i>
  122. </span>
  123. <div class="search-input-container">
  124. <input autocomplete="off" autocapitalize="off" maxlength="80"
  125. placeholder="搜索..." spellcheck="false"
  126. type="search" class="search-input">
  127. </div>
  128. <span class="popup-btn-close" role="button">
  129. <i class="fa fa-times-circle"></i>
  130. </span>
  131. </div>
  132. <div class="search-result-container no-result">
  133. <div class="search-result-icon">
  134. <i class="fa fa-spinner fa-pulse fa-5x"></i>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="toggle sidebar-toggle" role="button">
  141. <span class="toggle-line"></span>
  142. <span class="toggle-line"></span>
  143. <span class="toggle-line"></span>
  144. </div>
  145. <aside class="sidebar">
  146. <div class="sidebar-inner sidebar-overview-active">
  147. <ul class="sidebar-nav">
  148. <li class="sidebar-nav-toc">
  149. 文章目录
  150. </li>
  151. <li class="sidebar-nav-overview">
  152. 站点概览
  153. </li>
  154. </ul>
  155. <div class="sidebar-panel-container">
  156. <!--noindex-->
  157. <div class="post-toc-wrap sidebar-panel">
  158. </div>
  159. <!--/noindex-->
  160. <div class="site-overview-wrap sidebar-panel">
  161. <div class="site-author site-overview-item animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
  162. <img class="site-author-image" itemprop="image" alt="知行"
  163. src="/images/apple-touch-icon.png">
  164. <p class="site-author-name" itemprop="name">知行</p>
  165. <div class="site-description" itemprop="description">韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。</div>
  166. </div>
  167. <div class="site-state-wrap site-overview-item animated">
  168. <nav class="site-state">
  169. <div class="site-state-item site-state-posts">
  170. <a href="/archives/">
  171. <span class="site-state-item-count">45</span>
  172. <span class="site-state-item-name">日志</span>
  173. </a>
  174. </div>
  175. <div class="site-state-item site-state-categories">
  176. <a href="/categories/">
  177. <span class="site-state-item-count">29</span>
  178. <span class="site-state-item-name">分类</span></a>
  179. </div>
  180. <div class="site-state-item site-state-tags">
  181. <a href="/tags/">
  182. <span class="site-state-item-count">27</span>
  183. <span class="site-state-item-name">标签</span></a>
  184. </div>
  185. </nav>
  186. </div>
  187. <div class="links-of-author site-overview-item animated">
  188. <span class="links-of-author-item">
  189. <a href="https://github.com/izhixing" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;izhixing" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
  190. </span>
  191. <span class="links-of-author-item">
  192. <a href="mailto:3137650480@qq.com" title="E-Mail → mailto:3137650480@qq.com" rel="noopener" target="_blank"><i class="fa fa-envelope fa-fw"></i>E-Mail</a>
  193. </span>
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. </aside>
  199. <div class="sidebar-dimmer"></div>
  200. </header>
  201. <div class="back-to-top" role="button">
  202. <i class="fa fa-arrow-up"></i>
  203. <span>0%</span>
  204. </div>
  205. <a href="https://github.com/izhixing" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>
  206. <noscript>
  207. <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
  208. </noscript>
  209. <div class="main-inner index posts-expand">
  210. <div class="post-block">
  211. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  212. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/ce090114.html">
  213. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  214. <meta itemprop="image" content="/images/apple-touch-icon.png">
  215. <meta itemprop="name" content="知行">
  216. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  217. </span>
  218. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  219. <meta itemprop="name" content="知行">
  220. </span>
  221. <header class="post-header">
  222. <h2 class="post-title" itemprop="name headline">
  223. <a href="/posts/ce090114.html" class="post-title-link" itemprop="url">微服务的启动</a>
  224. </h2>
  225. <div class="post-meta-container">
  226. <div class="post-meta">
  227. <span class="post-meta-item">
  228. <span class="post-meta-item-icon">
  229. <i class="far fa-calendar"></i>
  230. </span>
  231. <span class="post-meta-item-text">发表于</span>
  232. <time title="创建时间:2021-04-06 22:37:06 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T22:37:06+08:00">2021-04-06</time>
  233. </span>
  234. <span class="post-meta-item">
  235. <span class="post-meta-item-icon">
  236. <i class="far fa-folder"></i>
  237. </span>
  238. <span class="post-meta-item-text">分类于</span>
  239. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  240. <a href="/categories/Docker/" itemprop="url" rel="index"><span itemprop="name">Docker</span></a>
  241. </span>
  242. </span>
  243. <span id="/posts/ce090114.html" class="post-meta-item leancloud_visitors" data-flag-title="微服务的启动" title="阅读次数">
  244. <span class="post-meta-item-icon">
  245. <i class="far fa-eye"></i>
  246. </span>
  247. <span class="post-meta-item-text">阅读次数:</span>
  248. <span class="leancloud-visitors-count"></span>
  249. </span>
  250. </div>
  251. </div>
  252. </header>
  253. <div class="post-body" itemprop="articleBody">
  254. <p>由于项目由单体变成了微服务的形式,因此项目的启动由一次变成了多次,但是单体项目与微服务有个不同点,就是微服务的服务之间存在依赖关系,不当的启动顺序会导致服务启动失败。</p>
  255. <p>PS:以下仅作记录,没有真实使用过,</p>
  256. <!--noindex-->
  257. <div class="post-button">
  258. <a class="btn" href="/posts/ce090114.html#more" rel="contents">
  259. 阅读全文 &raquo;
  260. </a>
  261. </div>
  262. <!--/noindex-->
  263. </div>
  264. <footer class="post-footer">
  265. <div class="post-eof"></div>
  266. </footer>
  267. </article>
  268. </div>
  269. <div class="post-block">
  270. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  271. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/6117b918.html">
  272. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  273. <meta itemprop="image" content="/images/apple-touch-icon.png">
  274. <meta itemprop="name" content="知行">
  275. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  276. </span>
  277. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  278. <meta itemprop="name" content="知行">
  279. </span>
  280. <header class="post-header">
  281. <h2 class="post-title" itemprop="name headline">
  282. <a href="/posts/6117b918.html" class="post-title-link" itemprop="url">线程间的互斥和同步</a>
  283. </h2>
  284. <div class="post-meta-container">
  285. <div class="post-meta">
  286. <span class="post-meta-item">
  287. <span class="post-meta-item-icon">
  288. <i class="far fa-calendar"></i>
  289. </span>
  290. <span class="post-meta-item-text">发表于</span>
  291. <time title="创建时间:2021-04-06 22:20:54 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T22:20:54+08:00">2021-04-06</time>
  292. </span>
  293. <span class="post-meta-item">
  294. <span class="post-meta-item-icon">
  295. <i class="far fa-folder"></i>
  296. </span>
  297. <span class="post-meta-item-text">分类于</span>
  298. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  299. <a href="/categories/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  300. </span>
  301. </span>
  302. <span id="/posts/6117b918.html" class="post-meta-item leancloud_visitors" data-flag-title="线程间的互斥和同步" title="阅读次数">
  303. <span class="post-meta-item-icon">
  304. <i class="far fa-eye"></i>
  305. </span>
  306. <span class="post-meta-item-text">阅读次数:</span>
  307. <span class="leancloud-visitors-count"></span>
  308. </span>
  309. </div>
  310. </div>
  311. </header>
  312. <div class="post-body" itemprop="articleBody">
  313. <p>多线程间是互相协助和互相联系的,因此多线程间存在互斥和同步。</p>
  314. <!-- more -->
  315. <h1 id="互斥和同步"><a href="#互斥和同步" class="headerlink" title="互斥和同步"></a>互斥和同步</h1><p>多线程间存在并发访问共享资源(修改资源)时就会出现互斥,保证共享数据在同一时刻只被一个线程使用。</p>
  316. <p>多线程同步是指一个线程由于某种原因(等待对象释放之类的)需要等待另一个线程执行完才能继续执行的现象,即线程间互相等待。</p>
  317. <p>互斥和同步是不可分离的,互斥是实现同步的一种手段,临界区、互斥量和信号量都是主要的互斥实现方式,互斥是因,同步是果,互斥是方法,同步是目的。</p>
  318. <h1 id="Java中的实现"><a href="#Java中的实现" class="headerlink" title="Java中的实现"></a>Java中的实现</h1><p>Java中wait()、notify()、notifyAll()三个方法就是用来实现线程同步的。</p>
  319. <p>wait()处于等待队列,或超时结束等待。notify()通知第一个处于等待的线程,notifyAll()则唤醒所有等待线程一起竞争cpu。</p>
  320. <p>Java中最基本的互斥同步手段就是synchronized。</p>
  321. </div>
  322. <footer class="post-footer">
  323. <div class="post-eof"></div>
  324. </footer>
  325. </article>
  326. </div>
  327. <div class="post-block">
  328. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  329. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/c3329247.html">
  330. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  331. <meta itemprop="image" content="/images/apple-touch-icon.png">
  332. <meta itemprop="name" content="知行">
  333. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  334. </span>
  335. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  336. <meta itemprop="name" content="知行">
  337. </span>
  338. <header class="post-header">
  339. <h2 class="post-title" itemprop="name headline">
  340. <a href="/posts/c3329247.html" class="post-title-link" itemprop="url">临界段</a>
  341. </h2>
  342. <div class="post-meta-container">
  343. <div class="post-meta">
  344. <span class="post-meta-item">
  345. <span class="post-meta-item-icon">
  346. <i class="far fa-calendar"></i>
  347. </span>
  348. <span class="post-meta-item-text">发表于</span>
  349. <time title="创建时间:2021-04-06 22:17:07 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T22:17:07+08:00">2021-04-06</time>
  350. </span>
  351. <span class="post-meta-item">
  352. <span class="post-meta-item-icon">
  353. <i class="far fa-folder"></i>
  354. </span>
  355. <span class="post-meta-item-text">分类于</span>
  356. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  357. <a href="/categories/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  358. </span>
  359. </span>
  360. <span id="/posts/c3329247.html" class="post-meta-item leancloud_visitors" data-flag-title="临界段" title="阅读次数">
  361. <span class="post-meta-item-icon">
  362. <i class="far fa-eye"></i>
  363. </span>
  364. <span class="post-meta-item-text">阅读次数:</span>
  365. <span class="leancloud-visitors-count"></span>
  366. </span>
  367. </div>
  368. </div>
  369. </header>
  370. <div class="post-body" itemprop="articleBody">
  371. <p>临界段即多线程互斥使用共享资源的代码段,是一种加锁的机制,在任意时刻一个共享资源只能被一个线程使用。</p>
  372. <p>Java中使用关键字synchronized定义临界段,能对共享对象进行加锁操作。</p>
  373. </div>
  374. <footer class="post-footer">
  375. <div class="post-eof"></div>
  376. </footer>
  377. </article>
  378. </div>
  379. <div class="post-block">
  380. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  381. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/f6f32af4.html">
  382. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  383. <meta itemprop="image" content="/images/apple-touch-icon.png">
  384. <meta itemprop="name" content="知行">
  385. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  386. </span>
  387. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  388. <meta itemprop="name" content="知行">
  389. </span>
  390. <header class="post-header">
  391. <h2 class="post-title" itemprop="name headline">
  392. <a href="/posts/f6f32af4.html" class="post-title-link" itemprop="url">注解@Autowired和@Resource区别</a>
  393. </h2>
  394. <div class="post-meta-container">
  395. <div class="post-meta">
  396. <span class="post-meta-item">
  397. <span class="post-meta-item-icon">
  398. <i class="far fa-calendar"></i>
  399. </span>
  400. <span class="post-meta-item-text">发表于</span>
  401. <time title="创建时间:2021-04-06 22:14:18 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T22:14:18+08:00">2021-04-06</time>
  402. </span>
  403. <span class="post-meta-item">
  404. <span class="post-meta-item-icon">
  405. <i class="far fa-folder"></i>
  406. </span>
  407. <span class="post-meta-item-text">分类于</span>
  408. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  409. <a href="/categories/Java/" itemprop="url" rel="index"><span itemprop="name">Java</span></a>
  410. </span>
  411. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  412. <a href="/categories/Java/%E6%A1%86%E6%9E%B6/" itemprop="url" rel="index"><span itemprop="name">框架</span></a>
  413. </span>
  414. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  415. <a href="/categories/Java/%E6%A1%86%E6%9E%B6/Spring/" itemprop="url" rel="index"><span itemprop="name">Spring</span></a>
  416. </span>
  417. </span>
  418. <span id="/posts/f6f32af4.html" class="post-meta-item leancloud_visitors" data-flag-title="注解@Autowired和@Resource区别" title="阅读次数">
  419. <span class="post-meta-item-icon">
  420. <i class="far fa-eye"></i>
  421. </span>
  422. <span class="post-meta-item-text">阅读次数:</span>
  423. <span class="leancloud-visitors-count"></span>
  424. </span>
  425. </div>
  426. </div>
  427. </header>
  428. <div class="post-body" itemprop="articleBody">
  429. <p>Spring提供了注解@Autowired用于依赖注入,同时也支持使用Java本身提供的注解@Resource用于依赖注入,这两个注解有什么异同呢?</p>
  430. <!--noindex-->
  431. <div class="post-button">
  432. <a class="btn" href="/posts/f6f32af4.html#more" rel="contents">
  433. 阅读全文 &raquo;
  434. </a>
  435. </div>
  436. <!--/noindex-->
  437. </div>
  438. <footer class="post-footer">
  439. <div class="post-eof"></div>
  440. </footer>
  441. </article>
  442. </div>
  443. <div class="post-block">
  444. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  445. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/44e8cd7.html">
  446. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  447. <meta itemprop="image" content="/images/apple-touch-icon.png">
  448. <meta itemprop="name" content="知行">
  449. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  450. </span>
  451. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  452. <meta itemprop="name" content="知行">
  453. </span>
  454. <header class="post-header">
  455. <h2 class="post-title" itemprop="name headline">
  456. <a href="/posts/44e8cd7.html" class="post-title-link" itemprop="url">进程间的通信方式</a>
  457. </h2>
  458. <div class="post-meta-container">
  459. <div class="post-meta">
  460. <span class="post-meta-item">
  461. <span class="post-meta-item-icon">
  462. <i class="far fa-calendar"></i>
  463. </span>
  464. <span class="post-meta-item-text">发表于</span>
  465. <time title="创建时间:2021-04-06 22:11:55 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T22:11:55+08:00">2021-04-06</time>
  466. </span>
  467. <span class="post-meta-item">
  468. <span class="post-meta-item-icon">
  469. <i class="far fa-folder"></i>
  470. </span>
  471. <span class="post-meta-item-text">分类于</span>
  472. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  473. <a href="/categories/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  474. </span>
  475. </span>
  476. <span id="/posts/44e8cd7.html" class="post-meta-item leancloud_visitors" data-flag-title="进程间的通信方式" title="阅读次数">
  477. <span class="post-meta-item-icon">
  478. <i class="far fa-eye"></i>
  479. </span>
  480. <span class="post-meta-item-text">阅读次数:</span>
  481. <span class="leancloud-visitors-count"></span>
  482. </span>
  483. </div>
  484. </div>
  485. </header>
  486. <div class="post-body" itemprop="articleBody">
  487. <p><strong>进程通信(Interprocess Communication,IPC)是一个进程与另一个进程间共享消息的一种通信方式</strong>。消息(message)是发送进程形成的一个消息块,将消息内容传送给接收进程。</p>
  488. <!--noindex-->
  489. <div class="post-button">
  490. <a class="btn" href="/posts/44e8cd7.html#more" rel="contents">
  491. 阅读全文 &raquo;
  492. </a>
  493. </div>
  494. <!--/noindex-->
  495. </div>
  496. <footer class="post-footer">
  497. <div class="post-eof"></div>
  498. </footer>
  499. </article>
  500. </div>
  501. <div class="post-block">
  502. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  503. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/ce4f4d1f.html">
  504. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  505. <meta itemprop="image" content="/images/apple-touch-icon.png">
  506. <meta itemprop="name" content="知行">
  507. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  508. </span>
  509. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  510. <meta itemprop="name" content="知行">
  511. </span>
  512. <header class="post-header">
  513. <h2 class="post-title" itemprop="name headline">
  514. <a href="/posts/ce4f4d1f.html" class="post-title-link" itemprop="url">CAS操作和ABA问题</a>
  515. </h2>
  516. <div class="post-meta-container">
  517. <div class="post-meta">
  518. <span class="post-meta-item">
  519. <span class="post-meta-item-icon">
  520. <i class="far fa-calendar"></i>
  521. </span>
  522. <span class="post-meta-item-text">发表于</span>
  523. <time title="创建时间:2021-04-06 16:11:00 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T16:11:00+08:00">2021-04-06</time>
  524. </span>
  525. <span class="post-meta-item">
  526. <span class="post-meta-item-icon">
  527. <i class="far fa-folder"></i>
  528. </span>
  529. <span class="post-meta-item-text">分类于</span>
  530. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  531. <a href="/categories/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  532. </span>
  533. </span>
  534. <span id="/posts/ce4f4d1f.html" class="post-meta-item leancloud_visitors" data-flag-title="CAS操作和ABA问题" title="阅读次数">
  535. <span class="post-meta-item-icon">
  536. <i class="far fa-eye"></i>
  537. </span>
  538. <span class="post-meta-item-text">阅读次数:</span>
  539. <span class="leancloud-visitors-count"></span>
  540. </span>
  541. </div>
  542. </div>
  543. </header>
  544. <div class="post-body" itemprop="articleBody">
  545. <p>多线程开发中,通常会加锁做并发控制,但是加锁会让性能降低,因此有了CAS操作,但CAS操作会引发ABA问题。</p>
  546. <!--noindex-->
  547. <div class="post-button">
  548. <a class="btn" href="/posts/ce4f4d1f.html#more" rel="contents">
  549. 阅读全文 &raquo;
  550. </a>
  551. </div>
  552. <!--/noindex-->
  553. </div>
  554. <footer class="post-footer">
  555. <div class="post-eof"></div>
  556. </footer>
  557. </article>
  558. </div>
  559. <div class="post-block">
  560. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  561. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/7ae49b47.html">
  562. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  563. <meta itemprop="image" content="/images/apple-touch-icon.png">
  564. <meta itemprop="name" content="知行">
  565. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  566. </span>
  567. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  568. <meta itemprop="name" content="知行">
  569. </span>
  570. <header class="post-header">
  571. <h2 class="post-title" itemprop="name headline">
  572. <a href="/posts/7ae49b47.html" class="post-title-link" itemprop="url">CAP理论和BASE理论</a>
  573. </h2>
  574. <div class="post-meta-container">
  575. <div class="post-meta">
  576. <span class="post-meta-item">
  577. <span class="post-meta-item-icon">
  578. <i class="far fa-calendar"></i>
  579. </span>
  580. <span class="post-meta-item-text">发表于</span>
  581. <time title="创建时间:2021-04-06 15:56:26 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T15:56:26+08:00">2021-04-06</time>
  582. </span>
  583. <span class="post-meta-item">
  584. <span class="post-meta-item-icon">
  585. <i class="far fa-folder"></i>
  586. </span>
  587. <span class="post-meta-item-text">分类于</span>
  588. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  589. <a href="/categories/%E5%88%86%E5%B8%83%E5%BC%8F/" itemprop="url" rel="index"><span itemprop="name">分布式</span></a>
  590. </span>
  591. </span>
  592. <span id="/posts/7ae49b47.html" class="post-meta-item leancloud_visitors" data-flag-title="CAP理论和BASE理论" title="阅读次数">
  593. <span class="post-meta-item-icon">
  594. <i class="far fa-eye"></i>
  595. </span>
  596. <span class="post-meta-item-text">阅读次数:</span>
  597. <span class="leancloud-visitors-count"></span>
  598. </span>
  599. </div>
  600. </div>
  601. </header>
  602. <div class="post-body" itemprop="articleBody">
  603. <p>说起分布式肯定绕不开两个理论:CAP理论和BASE理论。限于水平有限,本篇文章仅作记录用。</p>
  604. <!--noindex-->
  605. <div class="post-button">
  606. <a class="btn" href="/posts/7ae49b47.html#more" rel="contents">
  607. 阅读全文 &raquo;
  608. </a>
  609. </div>
  610. <!--/noindex-->
  611. </div>
  612. <footer class="post-footer">
  613. <div class="post-eof"></div>
  614. </footer>
  615. </article>
  616. </div>
  617. <div class="post-block">
  618. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  619. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/9a65c93a.html">
  620. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  621. <meta itemprop="image" content="/images/apple-touch-icon.png">
  622. <meta itemprop="name" content="知行">
  623. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  624. </span>
  625. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  626. <meta itemprop="name" content="知行">
  627. </span>
  628. <header class="post-header">
  629. <h2 class="post-title" itemprop="name headline">
  630. <a href="/posts/9a65c93a.html" class="post-title-link" itemprop="url">wait()和sleep()方法的区别</a>
  631. </h2>
  632. <div class="post-meta-container">
  633. <div class="post-meta">
  634. <span class="post-meta-item">
  635. <span class="post-meta-item-icon">
  636. <i class="far fa-calendar"></i>
  637. </span>
  638. <span class="post-meta-item-text">发表于</span>
  639. <time title="创建时间:2021-04-06 15:42:43 / 修改时间:22:39:44" itemprop="dateCreated datePublished" datetime="2021-04-06T15:42:43+08:00">2021-04-06</time>
  640. </span>
  641. <span class="post-meta-item">
  642. <span class="post-meta-item-icon">
  643. <i class="far fa-folder"></i>
  644. </span>
  645. <span class="post-meta-item-text">分类于</span>
  646. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  647. <a href="/categories/Java/" itemprop="url" rel="index"><span itemprop="name">Java</span></a>
  648. </span>
  649. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  650. <a href="/categories/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  651. </span>
  652. </span>
  653. <span id="/posts/9a65c93a.html" class="post-meta-item leancloud_visitors" data-flag-title="wait()和sleep()方法的区别" title="阅读次数">
  654. <span class="post-meta-item-icon">
  655. <i class="far fa-eye"></i>
  656. </span>
  657. <span class="post-meta-item-text">阅读次数:</span>
  658. <span class="leancloud-visitors-count"></span>
  659. </span>
  660. </div>
  661. </div>
  662. </header>
  663. <div class="post-body" itemprop="articleBody">
  664. <p>多线程开发中,让线程暂停执行是常见场景,Java提供了*sleep()<em>和</em>wait()*两种实现方法,但在具体使用上又有稍微差别。</p>
  665. <!--noindex-->
  666. <div class="post-button">
  667. <a class="btn" href="/posts/9a65c93a.html#more" rel="contents">
  668. 阅读全文 &raquo;
  669. </a>
  670. </div>
  671. <!--/noindex-->
  672. </div>
  673. <footer class="post-footer">
  674. <div class="post-eof"></div>
  675. </footer>
  676. </article>
  677. </div>
  678. <div class="post-block">
  679. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  680. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/c6b69b48.html">
  681. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  682. <meta itemprop="image" content="/images/apple-touch-icon.png">
  683. <meta itemprop="name" content="知行">
  684. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  685. </span>
  686. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  687. <meta itemprop="name" content="知行">
  688. </span>
  689. <header class="post-header">
  690. <h2 class="post-title" itemprop="name headline">
  691. <a href="/posts/c6b69b48.html" class="post-title-link" itemprop="url">线程和线程池的关闭</a>
  692. </h2>
  693. <div class="post-meta-container">
  694. <div class="post-meta">
  695. <span class="post-meta-item">
  696. <span class="post-meta-item-icon">
  697. <i class="far fa-calendar"></i>
  698. </span>
  699. <span class="post-meta-item-text">发表于</span>
  700. <time title="创建时间:2021-04-05 21:13:26" itemprop="dateCreated datePublished" datetime="2021-04-05T21:13:26+08:00">2021-04-05</time>
  701. </span>
  702. <span class="post-meta-item">
  703. <span class="post-meta-item-icon">
  704. <i class="far fa-calendar-check"></i>
  705. </span>
  706. <span class="post-meta-item-text">更新于</span>
  707. <time title="修改时间:2021-04-06 22:39:44" itemprop="dateModified" datetime="2021-04-06T22:39:44+08:00">2021-04-06</time>
  708. </span>
  709. <span class="post-meta-item">
  710. <span class="post-meta-item-icon">
  711. <i class="far fa-folder"></i>
  712. </span>
  713. <span class="post-meta-item-text">分类于</span>
  714. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  715. <a href="/categories/Java/" itemprop="url" rel="index"><span itemprop="name">Java</span></a>
  716. </span>
  717. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  718. <a href="/categories/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" itemprop="url" rel="index"><span itemprop="name">多线程</span></a>
  719. </span>
  720. </span>
  721. <span id="/posts/c6b69b48.html" class="post-meta-item leancloud_visitors" data-flag-title="线程和线程池的关闭" title="阅读次数">
  722. <span class="post-meta-item-icon">
  723. <i class="far fa-eye"></i>
  724. </span>
  725. <span class="post-meta-item-text">阅读次数:</span>
  726. <span class="leancloud-visitors-count"></span>
  727. </span>
  728. </div>
  729. </div>
  730. </header>
  731. <div class="post-body" itemprop="articleBody">
  732. <p>为了最大限度的提高系统性能,线程和线程池的使用都是必不可少的,使用后往往面临一个相同的问题:关闭!</p>
  733. <!--noindex-->
  734. <div class="post-button">
  735. <a class="btn" href="/posts/c6b69b48.html#more" rel="contents">
  736. 阅读全文 &raquo;
  737. </a>
  738. </div>
  739. <!--/noindex-->
  740. </div>
  741. <footer class="post-footer">
  742. <div class="post-eof"></div>
  743. </footer>
  744. </article>
  745. </div>
  746. <div class="post-block">
  747. <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
  748. <link itemprop="mainEntityOfPage" href="https://blog.izhixing.icu/posts/2871eb40.html">
  749. <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
  750. <meta itemprop="image" content="/images/apple-touch-icon.png">
  751. <meta itemprop="name" content="知行">
  752. <meta itemprop="description" content="韭零后一枚,技术菜鸟,喜欢做白日梦,热爱修仙,任职于一小公司里撸代码。">
  753. </span>
  754. <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
  755. <meta itemprop="name" content="知行">
  756. </span>
  757. <header class="post-header">
  758. <h2 class="post-title" itemprop="name headline">
  759. <a href="/posts/2871eb40.html" class="post-title-link" itemprop="url">String、StringBuilder和StringBuffer</a>
  760. </h2>
  761. <div class="post-meta-container">
  762. <div class="post-meta">
  763. <span class="post-meta-item">
  764. <span class="post-meta-item-icon">
  765. <i class="far fa-calendar"></i>
  766. </span>
  767. <span class="post-meta-item-text">发表于</span>
  768. <time title="创建时间:2021-04-05 15:13:37" itemprop="dateCreated datePublished" datetime="2021-04-05T15:13:37+08:00">2021-04-05</time>
  769. </span>
  770. <span class="post-meta-item">
  771. <span class="post-meta-item-icon">
  772. <i class="far fa-calendar-check"></i>
  773. </span>
  774. <span class="post-meta-item-text">更新于</span>
  775. <time title="修改时间:2021-04-06 22:39:44" itemprop="dateModified" datetime="2021-04-06T22:39:44+08:00">2021-04-06</time>
  776. </span>
  777. <span class="post-meta-item">
  778. <span class="post-meta-item-icon">
  779. <i class="far fa-folder"></i>
  780. </span>
  781. <span class="post-meta-item-text">分类于</span>
  782. <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
  783. <a href="/categories/Java/" itemprop="url" rel="index"><span itemprop="name">Java</span></a>
  784. </span>
  785. </span>
  786. <span id="/posts/2871eb40.html" class="post-meta-item leancloud_visitors" data-flag-title="String、StringBuilder和StringBuffer" title="阅读次数">
  787. <span class="post-meta-item-icon">
  788. <i class="far fa-eye"></i>
  789. </span>
  790. <span class="post-meta-item-text">阅读次数:</span>
  791. <span class="leancloud-visitors-count"></span>
  792. </span>
  793. </div>
  794. </div>
  795. </header>
  796. <div class="post-body" itemprop="articleBody">
  797. <p>String是Java中使用频率极高的一个类,但由于其是不可变,因此有StringBuffer和StringBuilder两个类来弥补在大量修改场景下的不足。</p>
  798. <!--noindex-->
  799. <div class="post-button">
  800. <a class="btn" href="/posts/2871eb40.html#more" rel="contents">
  801. 阅读全文 &raquo;
  802. </a>
  803. </div>
  804. <!--/noindex-->
  805. </div>
  806. <footer class="post-footer">
  807. <div class="post-eof"></div>
  808. </footer>
  809. </article>
  810. </div>
  811. <nav class="pagination">
  812. <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/page/5/">5</a><a class="extend next" rel="next" href="/page/2/"><i class="fa fa-angle-right" aria-label="下一页"></i></a>
  813. </nav>
  814. <script>
  815. window.addEventListener('tabs:register', () => {
  816. let { activeClass } = CONFIG.comments;
  817. if (CONFIG.comments.storage) {
  818. activeClass = localStorage.getItem('comments_active') || activeClass;
  819. }
  820. if (activeClass) {
  821. const activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
  822. if (activeTab) {
  823. activeTab.click();
  824. }
  825. }
  826. });
  827. if (CONFIG.comments.storage) {
  828. window.addEventListener('tabs:click', event => {
  829. if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
  830. const commentClass = event.target.classList[1];
  831. localStorage.setItem('comments_active', commentClass);
  832. });
  833. }
  834. </script>
  835. </div>
  836. </main>
  837. <footer class="footer">
  838. <div class="footer-inner">
  839. <div class="copyright">
  840. &copy; 2018 –
  841. <span itemprop="copyrightYear">2021</span>
  842. <span class="with-love">
  843. <i class="fa fa-heart"></i>
  844. </span>
  845. <span class="author" itemprop="copyrightHolder">知行</span>
  846. </div>
  847. <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" class="theme-link" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动
  848. </div>
  849. </div>
  850. </footer>
  851. <script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script>
  852. <script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script>
  853. <script src="/js/local-search.js"></script>
  854. <script>
  855. (function() {
  856. function leancloudSelector(url) {
  857. url = encodeURI(url);
  858. return document.getElementById(url).querySelector('.leancloud-visitors-count');
  859. }
  860. function addCount(Counter) {
  861. const visitors = document.querySelector('.leancloud_visitors');
  862. const url = decodeURI(visitors.id);
  863. const title = visitors.dataset.flagTitle;
  864. Counter('get', '/classes/Counter?where=' + encodeURIComponent(JSON.stringify({ url })))
  865. .then(response => response.json())
  866. .then(({ results }) => {
  867. if (results.length > 0) {
  868. const counter = results[0];
  869. leancloudSelector(url).innerText = counter.time + 1;
  870. Counter('put', '/classes/Counter/' + counter.objectId, { time: { '__op': 'Increment', 'amount': 1 } })
  871. .catch(error => {
  872. console.error('Failed to save visitor count', error);
  873. });
  874. } else {
  875. leancloudSelector(url).innerText = 'Counter not initialized! More info at console err msg.';
  876. console.error('ATTENTION! LeanCloud counter has security bug, see how to solve it here: https://github.com/theme-next/hexo-leancloud-counter-security. \n However, you can still use LeanCloud without security, by setting `security` option to `false`.');
  877. }
  878. })
  879. .catch(error => {
  880. console.error('LeanCloud Counter Error', error);
  881. });
  882. }
  883. function showTime(Counter) {
  884. const visitors = document.querySelectorAll('.leancloud_visitors');
  885. const entries = [...visitors].map(element => {
  886. return decodeURI(element.id);
  887. });
  888. Counter('get', '/classes/Counter?where=' + encodeURIComponent(JSON.stringify({ url: { '$in': entries } })))
  889. .then(response => response.json())
  890. .then(({ results }) => {
  891. for (let url of entries) {
  892. const target = results.find(item => item.url === url);
  893. leancloudSelector(url).innerText = target ? target.time : 0;
  894. }
  895. })
  896. .catch(error => {
  897. console.error('LeanCloud Counter Error', error);
  898. });
  899. }
  900. const { app_id, app_key, server_url } = {"enable":true,"app_id":"EVuNVQdwjVVETLVOGGdClySN-gzGzoHsz","app_key":"UBIufuTIEV1gHcdJIx6IOmyN","server_url":null,"security":true};
  901. function fetchData(api_server) {
  902. const Counter = (method, url, data) => {
  903. return fetch(`${api_server}/1.1${url}`, {
  904. method,
  905. headers: {
  906. 'X-LC-Id' : app_id,
  907. 'X-LC-Key' : app_key,
  908. 'Content-Type': 'application/json',
  909. },
  910. body: JSON.stringify(data)
  911. });
  912. };
  913. if (CONFIG.page.isPost) {
  914. if (CONFIG.hostname !== location.hostname) return;
  915. addCount(Counter);
  916. } else if (document.querySelectorAll('.post-title-link').length >= 1) {
  917. showTime(Counter);
  918. }
  919. }
  920. const api_server = app_id.slice(-9) === '-MdYXbMMI' ? `https://${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com` : server_url;
  921. if (api_server) {
  922. fetchData(api_server);
  923. } else {
  924. fetch('https://app-router.leancloud.cn/2/route?appId=' + app_id)
  925. .then(response => response.json())
  926. .then(({ api_server }) => {
  927. fetchData('https://' + api_server);
  928. });
  929. }
  930. })();
  931. </script>
  932. </body>
  933. </html>