-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.json
1 lines (1 loc) · 130 KB
/
db.json
1
{"meta":{"version":1,"warehouse":"2.2.0"},"models":{"Asset":[{"_id":"source/images/java_001.jpg","path":"images/java_001.jpg","modified":1,"renderable":0},{"_id":"source/images/java_003.png","path":"images/java_003.png","modified":1,"renderable":0},{"_id":"source/images/java_002.jpg","path":"images/java_002.jpg","modified":1,"renderable":0},{"_id":"themes/next/source/css/main.styl","path":"css/main.styl","modified":1,"renderable":1},{"_id":"themes/next/source/images/algolia_logo.svg","path":"images/algolia_logo.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/avatar.gif","path":"images/avatar.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc-sa.svg","path":"images/cc-by-nc-sa.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc-nd.svg","path":"images/cc-by-nc-nd.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc.svg","path":"images/cc-by-nc.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nd.svg","path":"images/cc-by-nd.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-sa.svg","path":"images/cc-by-sa.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by.svg","path":"images/cc-by.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-zero.svg","path":"images/cc-zero.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/loading.gif","path":"images/loading.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/logo.jpeg","path":"images/logo.jpeg","modified":1,"renderable":1},{"_id":"themes/next/source/images/placeholder.gif","path":"images/placeholder.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/quote-r.svg","path":"images/quote-r.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/quote-l.svg","path":"images/quote-l.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/searchicon.png","path":"images/searchicon.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.css","path":"lib/algolia-instant-search/instantsearch.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/canvas-nest/canvas-nest.min.js","path":"lib/canvas-nest/canvas-nest.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/HELP-US-OUT.txt","path":"lib/font-awesome/HELP-US-OUT.txt","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/bower.json","path":"lib/font-awesome/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/LICENSE","path":"lib/fastclick/LICENSE","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/README.md","path":"lib/fastclick/README.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/bower.json","path":"lib/fastclick/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/README.md","path":"lib/jquery_lazyload/README.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/CONTRIBUTING.md","path":"lib/jquery_lazyload/CONTRIBUTING.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/bower.json","path":"lib/jquery_lazyload/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.lazyload.js","path":"lib/jquery_lazyload/jquery.lazyload.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.scrollstop.js","path":"lib/jquery_lazyload/jquery.scrollstop.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/bower.json","path":"lib/velocity/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.min.js","path":"lib/velocity/velocity.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.ui.js","path":"lib/velocity/velocity.ui.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.ui.min.js","path":"lib/velocity/velocity.ui.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/three-waves.min.js","path":"lib/three/three-waves.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/affix.js","path":"js/src/affix.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/bootstrap.js","path":"js/src/bootstrap.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/algolia-search.js","path":"js/src/algolia-search.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/exturl.js","path":"js/src/exturl.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/hook-duoshuo.js","path":"js/src/hook-duoshuo.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/motion.js","path":"js/src/motion.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/post-details.js","path":"js/src/post-details.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/scrollspy.js","path":"js/src/scrollspy.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/utils.js","path":"js/src/utils.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery/index.js","path":"lib/jquery/index.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/blank.gif","path":"lib/fancybox/source/blank.gif","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading.gif","path":"lib/fancybox/source/fancybox_loading.gif","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite.png","path":"lib/fancybox/source/fancybox_sprite.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading@2x.gif","path":"lib/fancybox/source/fancybox_loading@2x.gif","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_overlay.png","path":"lib/fancybox/source/fancybox_overlay.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite@2x.png","path":"lib/fancybox/source/fancybox_sprite@2x.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.css","path":"lib/fancybox/source/jquery.fancybox.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.js","path":"lib/fancybox/source/jquery.fancybox.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js","path":"lib/fancybox/source/jquery.fancybox.pack.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css","path":"lib/font-awesome/css/font-awesome.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css.map","path":"lib/font-awesome/css/font-awesome.css.map","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.min.css","path":"lib/font-awesome/css/font-awesome.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.js","path":"lib/fastclick/lib/fastclick.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.min.js","path":"lib/fastclick/lib/fastclick.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js","path":"lib/ua-parser-js/dist/ua-parser.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js","path":"lib/ua-parser-js/dist/ua-parser.pack.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/schemes/pisces.js","path":"js/src/schemes/pisces.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff","path":"lib/font-awesome/fonts/fontawesome-webfont.woff","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2","path":"lib/font-awesome/fonts/fontawesome-webfont.woff2","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.js","path":"lib/velocity/velocity.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/fancybox_buttons.png","path":"lib/fancybox/source/helpers/fancybox_buttons.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","path":"lib/fancybox/source/helpers/jquery.fancybox-buttons.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","path":"lib/fancybox/source/helpers/jquery.fancybox-buttons.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","path":"lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-media.js","path":"lib/fancybox/source/helpers/jquery.fancybox-media.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","path":"lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/FontAwesome.otf","path":"lib/font-awesome/fonts/FontAwesome.otf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot","path":"lib/font-awesome/fonts/fontawesome-webfont.eot","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.ttf","path":"lib/font-awesome/fonts/fontawesome-webfont.ttf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.js","path":"lib/algolia-instant-search/instantsearch.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/three.min.js","path":"lib/three/three.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.svg","path":"lib/font-awesome/fonts/fontawesome-webfont.svg","modified":1,"renderable":1}],"Cache":[{"_id":"themes/next/.bowerrc","hash":"3228a58ed0ece9f85e1e3136352094080b8dece1","modified":1490345568000},{"_id":"themes/next/.editorconfig","hash":"792fd2bd8174ece1a75d5fd24ab16594886f3a7f","modified":1490345568000},{"_id":"themes/next/.gitignore","hash":"5f09fca02e030b7676c1d312cd88ce8fbccf381c","modified":1490345568000},{"_id":"themes/next/.gitattributes","hash":"44bd4729c74ccb88110804f41746fec07bf487d4","modified":1490345568000},{"_id":"themes/next/.hound.yml","hash":"b76daa84c9ca3ad292c78412603370a367cc2bc3","modified":1490345568000},{"_id":"themes/next/.javascript_ignore","hash":"f9ea3c5395f8feb225a24e2c32baa79afda30c16","modified":1490345568000},{"_id":"themes/next/.jshintrc","hash":"9928f81bd822f6a8d67fdbc909b517178533bca9","modified":1490345568000},{"_id":"themes/next/.stylintrc","hash":"b28e24704a5d8de08346c45286574c8e76cc109f","modified":1490345568000},{"_id":"themes/next/.travis.yml","hash":"c42d9608c8c7fe90de7b1581a8dc3886e90c179e","modified":1490345568000},{"_id":"themes/next/LICENSE","hash":"f293bcfcdc06c0b77ba13570bb8af55eb5c059fd","modified":1490345568000},{"_id":"themes/next/README.md","hash":"500b5606eb6a09c979d16128f8b00f4bf9bc95ac","modified":1490345568000},{"_id":"themes/next/README.en.md","hash":"4ece25ee5f64447cd522e54cb0fffd9a375f0bd4","modified":1490345568000},{"_id":"themes/next/bower.json","hash":"5abc236d9cc2512f5457ed57c1fba76669eb7399","modified":1490345568000},{"_id":"themes/next/_config.yml","hash":"323f65a698b5910064da1d7375ef6b2ed99021e7","modified":1495555626441},{"_id":"themes/next/gulpfile.coffee","hash":"031bffc483e417b20e90eceb6cf358e7596d2e69","modified":1490345568000},{"_id":"themes/next/package.json","hash":"7e87b2621104b39a30488654c2a8a0c6a563574b","modified":1490345568000},{"_id":"source/_posts/Java-hread-pool-001.md","hash":"d5580e32a71f69d24114ebae72aa929201e7db92","modified":1495636642939},{"_id":"source/_posts/心情小记.md","hash":"4bfb9d72c71aa8bac0ec940cf6fa0e9002f3f1a2","modified":1495636824755},{"_id":"source/_posts/hello-world.md","hash":"a9d4ec57102f49a78e5a88839fbcea680dcfbf93","modified":1495635688529},{"_id":"source/categories/index.md","hash":"9c0ce6f263736aef049d67e1704ea2b23fe9984b","modified":1495553294597},{"_id":"source/tags/index.md","hash":"fc0c30125e7694a9a1aed943468cae3980db48cf","modified":1495553549277},{"_id":"source/images/java_001.jpg","hash":"7abb1120c18a88b3b5a8d3dc25c21341f5f2795d","modified":1495640339403},{"_id":"source/images/java_003.png","hash":"7fd9befd604a1fafdb7217cc89ce64ba9bfce0d7","modified":1495640787577},{"_id":"source/images/java_002.jpg","hash":"8c4e84f6545a5de3a3acf78f7bb5ffb2b0a27ea3","modified":1495640436162},{"_id":"themes/next/.github/CONTRIBUTING.md","hash":"3b5eafd32abb718e56ccf8d1cee0607ad8ce611d","modified":1490345568000},{"_id":"themes/next/.github/ISSUE_TEMPLATE.md","hash":"fdd63b77472612337309eb93ec415a059b90756b","modified":1490345568000},{"_id":"themes/next/languages/de.yml","hash":"306db8c865630f32c6b6260ade9d3209fbec8011","modified":1490345568000},{"_id":"themes/next/languages/default.yml","hash":"4cc6aeb1ac09a58330e494c8771773758ab354af","modified":1490345568000},{"_id":"themes/next/languages/en.yml","hash":"e7def07a709ef55684490b700a06998c67f35f39","modified":1490345568000},{"_id":"themes/next/languages/id.yml","hash":"2835ea80dadf093fcf47edd957680973f1fb6b85","modified":1490345568000},{"_id":"themes/next/languages/ja.yml","hash":"1c3a05ab80a6f8be63268b66da6f19da7aa2c638","modified":1490345568000},{"_id":"themes/next/languages/fr-FR.yml","hash":"24180322c83587a153cea110e74e96eacc3355ad","modified":1490345568000},{"_id":"themes/next/languages/ko.yml","hash":"be150543379150f78329815af427bf152c0e9431","modified":1490345568000},{"_id":"themes/next/languages/pt-BR.yml","hash":"958e49571818a34fdf4af3232a07a024050f8f4e","modified":1490345568000},{"_id":"themes/next/languages/pt.yml","hash":"36c8f60dacbe5d27d84d0e0d6974d7679f928da0","modified":1490345568000},{"_id":"themes/next/languages/ru.yml","hash":"7462c3017dae88e5f80ff308db0b95baf960c83f","modified":1490345568000},{"_id":"themes/next/languages/zh-Hans.yml","hash":"3c0c7dfd0256457ee24df9e9879226c58cb084b5","modified":1490345568000},{"_id":"themes/next/languages/zh-tw.yml","hash":"0b2c18aa76570364003c8d1cd429fa158ae89022","modified":1490345568000},{"_id":"themes/next/languages/zh-hk.yml","hash":"1c917997413bf566cb79e0975789f3c9c9128ccd","modified":1490345568000},{"_id":"themes/next/layout/_layout.swig","hash":"909d68b164227fe7601d82e2303bf574eb754172","modified":1490345568000},{"_id":"themes/next/layout/archive.swig","hash":"b5b59d70fc1563f482fa07afd435752774ad5981","modified":1490345568000},{"_id":"themes/next/layout/index.swig","hash":"427d0b95b854e311ae363088ab39a393bf8fdc8b","modified":1490345568000},{"_id":"themes/next/layout/category.swig","hash":"6422d196ceaff4220d54b8af770e7e957f3364ad","modified":1490345568000},{"_id":"themes/next/layout/page.swig","hash":"3727fab9dadb967e9c2204edca787dc72264674a","modified":1490345568000},{"_id":"themes/next/layout/post.swig","hash":"e2e512142961ddfe77eba29eaa88f4a2ee43ae18","modified":1490345568000},{"_id":"themes/next/layout/schedule.swig","hash":"234dc8c3b9e276e7811c69011efd5d560519ef19","modified":1490345568000},{"_id":"themes/next/layout/tag.swig","hash":"07cf49c49c39a14dfbe9ce8e7d7eea3d4d0a4911","modified":1490345568000},{"_id":"themes/next/test/.jshintrc","hash":"19f93d13d1689fe033c82eb2d5f3ce30b6543cc0","modified":1490345568000},{"_id":"themes/next/test/helpers.js","hash":"a1f5de25154c3724ffc24a91ddc576cdbd60864f","modified":1490345568000},{"_id":"themes/next/test/intern.js","hash":"11fa8a4f5c3b4119a179ae0a2584c8187f907a73","modified":1490345568000},{"_id":"themes/next/scripts/merge-configs.js","hash":"13c8b3a2d9fce06c2488820d9248d190c8100e0a","modified":1490345568000},{"_id":"themes/next/scripts/merge.js","hash":"9130dabe6a674c54b535f322b17d75fe6081472f","modified":1490345568000},{"_id":"themes/next/source/fonts/.gitkeep","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/layout/_custom/sidebar.swig","hash":"adc83b19e793491b1c6ea0fd8b46cd9f32e592fc","modified":1490345568000},{"_id":"themes/next/layout/_custom/header.swig","hash":"adc83b19e793491b1c6ea0fd8b46cd9f32e592fc","modified":1490345568000},{"_id":"themes/next/layout/_macro/post-collapse.swig","hash":"5864f5567ba5efeabcf6ea355013c0b603ee07f2","modified":1490345568000},{"_id":"themes/next/layout/_macro/post.swig","hash":"640b431eccbbd27f10c6781f33db5ea9a6e064de","modified":1490345568000},{"_id":"themes/next/layout/_macro/post-copyright.swig","hash":"b16fcbf0efd20c018d7545257a8533c497ea7647","modified":1490345568000},{"_id":"themes/next/layout/_macro/sidebar.swig","hash":"911b99ba0445b2c07373128d87a4ef2eb7de341a","modified":1490345568000},{"_id":"themes/next/layout/_macro/wechat-subscriber.swig","hash":"14e785adeb0e671ba0ff9a553e6f0d8def6c670c","modified":1490345568000},{"_id":"themes/next/layout/_macro/reward.swig","hash":"37e5b7c42ec17b9b6b786c5512bcc481a21c974e","modified":1490345568000},{"_id":"themes/next/layout/_partials/comments.swig","hash":"1c7d3c975e499b9aa3119d6724b030b7b00fc87e","modified":1490345568000},{"_id":"themes/next/layout/_partials/footer.swig","hash":"7172c6053118b7c291a56a7860128a652ae66b83","modified":1490345568000},{"_id":"themes/next/layout/_partials/head.swig","hash":"a0eafe24d1dae30c790ae35612154b3ffbbd5cce","modified":1490345568000},{"_id":"themes/next/layout/_partials/header.swig","hash":"a1ffbb691dfad3eaf2832a11766e58a179003b8b","modified":1490345568000},{"_id":"themes/next/layout/_partials/page-header.swig","hash":"1efd925d34a5d4ba2dc0838d9c86ba911e705fc9","modified":1490345568000},{"_id":"themes/next/layout/_partials/pagination.swig","hash":"9e8e21d194ef44d271b1cca0bc1448c14d7edf4f","modified":1490345568000},{"_id":"themes/next/layout/_partials/search.swig","hash":"9dbd378e94abfcb3f864a5b8dbbf18d212ca2ee0","modified":1490345568000},{"_id":"themes/next/layout/_scripts/boostrap.swig","hash":"03aaebe9d50f6acb007ec38cc04acd1cfceb404d","modified":1490345568000},{"_id":"themes/next/layout/_scripts/commons.swig","hash":"766b2bdda29523ed6cd8d7aa197f996022f8fd94","modified":1490345568000},{"_id":"themes/next/layout/_scripts/vendors.swig","hash":"9de352a32865869e7ed6863db271c46db5853e5a","modified":1490345568000},{"_id":"themes/next/layout/_third-party/exturl.swig","hash":"7c04a42319d728be356746363aff8ea247791d24","modified":1490345568000},{"_id":"themes/next/layout/_third-party/duoshuo-hot-articles.swig","hash":"5d4638c46aef65bf32a01681495b62416ccc98db","modified":1490345568000},{"_id":"themes/next/layout/_third-party/schedule.swig","hash":"22369026c87fc23893c35a7f250b42f3bb1b60f1","modified":1490345568000},{"_id":"themes/next/layout/_third-party/mathjax.swig","hash":"6d25596d6a7c57700d37b607f8d9a62d89708683","modified":1490345568000},{"_id":"themes/next/source/css/main.styl","hash":"20702c48d6053c92c5bcdbc68e8d0ef1369848a0","modified":1490345568000},{"_id":"themes/next/source/images/algolia_logo.svg","hash":"90035272fa31a3f65b3c0e2cb8a633876ef457dc","modified":1490345568000},{"_id":"themes/next/source/images/avatar.gif","hash":"264082bb3a1af70d5499c7d22b0902cb454b6d12","modified":1490345568000},{"_id":"themes/next/source/images/cc-by-nc-sa.svg","hash":"3031be41e8753c70508aa88e84ed8f4f653f157e","modified":1490345568000},{"_id":"themes/next/source/images/cc-by-nc-nd.svg","hash":"c6524ece3f8039a5f612feaf865d21ec8a794564","modified":1490345568000},{"_id":"themes/next/source/images/cc-by-nc.svg","hash":"8d39b39d88f8501c0d27f8df9aae47136ebc59b7","modified":1490345568000},{"_id":"themes/next/source/images/cc-by-nd.svg","hash":"c563508ce9ced1e66948024ba1153400ac0e0621","modified":1490345568000},{"_id":"themes/next/source/images/cc-by-sa.svg","hash":"aa4742d733c8af8d38d4c183b8adbdcab045872e","modified":1490345568000},{"_id":"themes/next/source/images/cc-by.svg","hash":"28a0a4fe355a974a5e42f68031652b76798d4f7e","modified":1490345568000},{"_id":"themes/next/source/images/cc-zero.svg","hash":"87669bf8ac268a91d027a0a4802c92a1473e9030","modified":1490345568000},{"_id":"themes/next/source/images/loading.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1490345568000},{"_id":"themes/next/source/images/logo.jpeg","hash":"8eeb6b26264c5f16115c8181a8ef8c11e2509218","modified":1495460545200},{"_id":"themes/next/source/images/placeholder.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1490345568000},{"_id":"themes/next/source/images/quote-r.svg","hash":"e60ae504f9d99b712c793c3740c6b100d057d4ec","modified":1490345568000},{"_id":"themes/next/source/images/quote-l.svg","hash":"94e870b4c8c48da61d09522196d4dd40e277a98f","modified":1490345568000},{"_id":"themes/next/source/images/searchicon.png","hash":"67727a6a969be0b2659b908518fa6706eed307b8","modified":1490345568000},{"_id":"themes/next/scripts/tags/button.js","hash":"62e6dbeb53d07627a048132c79630b45d9a8f2cc","modified":1490345568000},{"_id":"themes/next/scripts/tags/center-quote.js","hash":"535fc542781021c4326dec24d8495cbb1387634a","modified":1490345568000},{"_id":"themes/next/scripts/tags/full-image.js","hash":"8eeb3fb89540299bdbb799edfdfdac3743b50596","modified":1490345568000},{"_id":"themes/next/scripts/tags/group-pictures.js","hash":"49252824cd53184dc9b97b2f2d87ff28e1b3ef27","modified":1490345568000},{"_id":"themes/next/scripts/tags/note.js","hash":"6752925eedbdb939d8ec4d11bdfb75199f18dd70","modified":1490345568000},{"_id":"themes/next/scripts/tags/exturl.js","hash":"8d7e60f60779bde050d20fd76f6fdc36fc85e06d","modified":1490345568000},{"_id":"themes/next/layout/_scripts/schemes/mist.swig","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/layout/_scripts/schemes/muse.swig","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/source/css/_variables/custom.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/source/css/_variables/Muse.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/source/css/_mixins/Mist.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/source/css/_mixins/Muse.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/source/css/_mixins/custom.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1490345568000},{"_id":"themes/next/layout/_partials/head/custom-head.swig","hash":"9e1b9666efa77f4cf8d8261bcfa445a9ac608e53","modified":1490345568000},{"_id":"themes/next/layout/_partials/head/external-fonts.swig","hash":"7ce76358411184482bb0934e70037949dd0da8ca","modified":1490345568000},{"_id":"themes/next/layout/_partials/search/localsearch.swig","hash":"2d1075f4cabcb3956b7b84a8e210f5a66f0a5562","modified":1490345568000},{"_id":"themes/next/layout/_partials/search/swiftype.swig","hash":"959b7e04a96a5596056e4009b73b6489c117597e","modified":1490345568000},{"_id":"themes/next/layout/_partials/search/tinysou.swig","hash":"eefe2388ff3d424694045eda21346989b123977c","modified":1490345568000},{"_id":"themes/next/layout/_partials/share/add-this.swig","hash":"23e23dc0f76ef3c631f24c65277adf7ea517b383","modified":1490345568000},{"_id":"themes/next/layout/_partials/share/duoshuo_share.swig","hash":"89c5a5240ecb223acfe1d12377df5562a943fd5d","modified":1490345568000},{"_id":"themes/next/layout/_partials/share/baidushare.swig","hash":"1f1107468aaf03f7d0dcd7eb2b653e2813a675b4","modified":1490345568000},{"_id":"themes/next/layout/_partials/share/jiathis.swig","hash":"63315fcf210799f894208c9f512737096df84962","modified":1490345568000},{"_id":"themes/next/layout/_scripts/pages/post-details.swig","hash":"069d1357c717572256e5cdee09574ebce529cbae","modified":1490345568000},{"_id":"themes/next/layout/_scripts/schemes/pisces.swig","hash":"a44acf9b0d0f44ef3dfc767376a95c984cc127de","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/application-insights.swig","hash":"60426bf73f8a89ba61fb1be2df3ad5398e32c4ef","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/baidu-analytics.swig","hash":"deda6a814ed48debc694c4e0c466f06c127163d0","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/busuanzi-counter.swig","hash":"18e7bef8923d83ea42df6c97405e515a876cede4","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/cnzz-analytics.swig","hash":"8160b27bee0aa372c7dc7c8476c05bae57f58d0f","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/facebook-sdk.swig","hash":"394d008e5e94575280407ad8a1607a028026cbc3","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/google-analytics.swig","hash":"5d9943d74cc2e0a91badcf4f755c6de77eab193a","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/index.swig","hash":"3358d11b9a26185a2d36c96049e4340e701646e4","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/lean-analytics.swig","hash":"92dc60821307fc9769bea9b2d60adaeb798342af","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/tencent-analytics.swig","hash":"3658414379e0e8a34c45c40feadc3edc8dc55f88","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/tencent-mta.swig","hash":"a652f202bd5b30c648c228ab8f0e997eb4928e44","modified":1490345568000},{"_id":"themes/next/layout/_third-party/analytics/vkontakte-api.swig","hash":"c3971fd154d781088e1cc665035f8561a4098f4c","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/changyan.swig","hash":"0e3378f7c39b2b0f69638290873ede6b6b6825c0","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/disqus.swig","hash":"c316758546dc9ba6c60cb4d852c17ca6bb6d6724","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/gentie.swig","hash":"03592d1d731592103a41ebb87437fe4b0a4c78ca","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/duoshuo.swig","hash":"a356b2185d40914447fde817eb3d358ab6b3e4c3","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/hypercomments.swig","hash":"3e8dc5c6c912628a37e3b5f886bec7b2e5ed14ea","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/livere.swig","hash":"7240f2e5ec7115f8abbbc4c9ef73d4bed180fdc7","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/index.swig","hash":"abb92620197a16ed2c0775edf18a0f044a82256e","modified":1490345568000},{"_id":"themes/next/layout/_third-party/comments/youyan.swig","hash":"af9dd8a4aed7d06cf47b363eebff48850888566c","modified":1490345568000},{"_id":"themes/next/layout/_third-party/search/index.swig","hash":"c747fb5c6b1f500e8f0c583e44195878b66e4e29","modified":1490345568000},{"_id":"themes/next/layout/_third-party/search/localsearch.swig","hash":"f4dbd4c896e6510ded8ebe05394c28f8a86e71bf","modified":1490345568000},{"_id":"themes/next/layout/_third-party/search/tinysou.swig","hash":"cb3a5d36dbe1630bab84e03a52733a46df7c219b","modified":1490345568000},{"_id":"themes/next/layout/_third-party/seo/baidu-push.swig","hash":"c057b17f79e8261680fbae8dc4e81317a127c799","modified":1490345568000},{"_id":"themes/next/source/css/_custom/custom.styl","hash":"328d9a9696cc2ccf59c67d3c26000d569f46344c","modified":1490345568000},{"_id":"themes/next/source/css/_variables/Mist.styl","hash":"c8d35a6b9e3bff6d8fdb66de853065af9d37562d","modified":1490345568000},{"_id":"themes/next/source/css/_variables/Pisces.styl","hash":"06f432f328a5b8a9ef0dbd5301b002aba600b4ce","modified":1490345568000},{"_id":"themes/next/source/css/_variables/base.styl","hash":"28a7f84242ca816a6452a0a79669ca963d824607","modified":1490345568000},{"_id":"themes/next/source/css/_mixins/Pisces.styl","hash":"715d5b40dc52f319fe4bff0325beb874774d9bd9","modified":1490345568000},{"_id":"themes/next/source/css/_mixins/base.styl","hash":"78a83c38f69a8747bb74e420e6c9eeef1ea76525","modified":1490345568000},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.css","hash":"90ef19edc982645b118b095615838d9c5eaba0de","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/.bower.json","hash":"cc40a9b11e52348e554c84e4a5c058056f6b7aeb","modified":1490345568000},{"_id":"themes/next/source/lib/canvas-nest/canvas-nest.min.js","hash":"0387e75e23b1db108a755073fe52a0d03eb391a7","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/.gitattributes","hash":"2db21acfbd457452462f71cc4048a943ee61b8e0","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/.bower.json","hash":"a2aaaf12378db56bd10596ba3daae30950eac051","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/.gitignore","hash":"69d152fa46b517141ec3b1114dd6134724494d83","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/.npmignore","hash":"dcf470ab3a358103bb896a539cc03caeda10fa8b","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/HELP-US-OUT.txt","hash":"4f7bf961f1bed448f6ba99aeb9219fabf930ba96","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/bower.json","hash":"279a8a718ab6c930a67c41237f0aac166c1b9440","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/.bower.json","hash":"93ebd5b35e632f714dcf1753e1f6db77ec74449b","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/LICENSE","hash":"dcd5b6b43095d9e90353a28b09cb269de8d4838e","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/README.md","hash":"1decd8e1adad2cd6db0ab50cf56de6035156f4ea","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/bower.json","hash":"13379463c7463b4b96d13556b46faa4cc38d81e6","modified":1490345568000},{"_id":"themes/next/source/lib/jquery/.bower.json","hash":"91745c2cc6c946c7275f952b2b0760b880cea69e","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/.bower.json","hash":"b7638afc93e9cd350d0783565ee9a7da6805ad8e","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/README.md","hash":"895d50fa29759af7835256522e9dd7dac597765c","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/CONTRIBUTING.md","hash":"4891864c24c28efecd81a6a8d3f261145190f901","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/bower.json","hash":"65bc85d12197e71c40a55c0cd7f6823995a05222","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.lazyload.js","hash":"481fd478650e12b67c201a0ea41e92743f8b45a3","modified":1490345568000},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.scrollstop.js","hash":"0e9a81785a011c98be5ea821a8ed7d411818cfd1","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/.bower.json","hash":"05f960846f1c7a93dab1d3f9a1121e86812e8c88","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/bower.json","hash":"2ec99573e84c7117368beccb9e94b6bf35d2db03","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/velocity.min.js","hash":"2f1afadc12e4cf59ef3b405308d21baa97e739c6","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/velocity.ui.js","hash":"6a1d101eab3de87527bb54fcc8c7b36b79d8f0df","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/velocity.ui.min.js","hash":"ed5e534cd680a25d8d14429af824f38a2c7d9908","modified":1490345568000},{"_id":"themes/next/source/lib/three/three-waves.min.js","hash":"5b38ae00297ffc07f433c632c3dbf7bde4cdf39a","modified":1490345568000},{"_id":"themes/next/source/js/src/affix.js","hash":"978e0422b5bf1b560236d8d10ebc1adcf66392e3","modified":1490345568000},{"_id":"themes/next/source/js/src/bootstrap.js","hash":"aab7be0a6e2724b3faa9338db93c19556c559625","modified":1490345568000},{"_id":"themes/next/source/js/src/algolia-search.js","hash":"b172f697ed339a24b1e80261075232978d164c35","modified":1490345568000},{"_id":"themes/next/source/js/src/exturl.js","hash":"e42e2aaab7bf4c19a0c8e779140e079c6aa5c0b1","modified":1490345568000},{"_id":"themes/next/source/js/src/hook-duoshuo.js","hash":"a6119070c0119f33e08b29da7d2cce2635eb40a0","modified":1490345568000},{"_id":"themes/next/source/js/src/motion.js","hash":"269414e84df544a4ccb88519f6abae4943db3c67","modified":1490345568000},{"_id":"themes/next/source/js/src/post-details.js","hash":"af7a417dd1cb02465a7b98211653e7c6192e6d55","modified":1490345568000},{"_id":"themes/next/source/js/src/scrollspy.js","hash":"fe4da1b9fe73518226446f5f27d2831e4426fc35","modified":1490345568000},{"_id":"themes/next/source/js/src/utils.js","hash":"e13c9ccf70d593bdf3b8cc1d768f595abd610e6e","modified":1490345568000},{"_id":"themes/next/source/lib/jquery/index.js","hash":"41b4bfbaa96be6d1440db6e78004ade1c134e276","modified":1490345568000},{"_id":"themes/next/layout/_third-party/search/algolia-search/assets.swig","hash":"28ff4ed6714c59124569ffcbd10f1173d53ca923","modified":1490345568000},{"_id":"themes/next/layout/_third-party/search/algolia-search/dom.swig","hash":"ba698f49dd3a868c95b240d802f5b1b24ff287e4","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/back-to-top-sidebar.styl","hash":"59ad08bcc6fe9793594869ac2b4c525021453e78","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/back-to-top.styl","hash":"ef089a407c90e58eca10c49bc47ec978f96e03ba","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/buttons.styl","hash":"0dfb4b3ba3180d7285e66f270e1d3fa0f132c3d2","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/comments.styl","hash":"471f1627891aca5c0e1973e09fbcb01e1510d193","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/components.styl","hash":"a6bb5256be6195e76addbda12f4ed7c662d65e7a","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pagination.styl","hash":"711c8830886619d4f4a0598b0cde5499dce50c62","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tag-cloud.styl","hash":"dd8a3b22fc2f222ac6e6c05bd8a773fb039169c0","modified":1490345568000},{"_id":"themes/next/source/css/_common/outline/outline.styl","hash":"2186be20e317505cd31886f1291429cc21f76703","modified":1490345568000},{"_id":"themes/next/source/css/_common/scaffolding/base.styl","hash":"7804e31c44717c9a9ddf0f8482b9b9c1a0f74538","modified":1490345568000},{"_id":"themes/next/source/css/_common/scaffolding/helpers.styl","hash":"9c25c75311e1bd4d68df031d3f2ae6d141a90766","modified":1490345568000},{"_id":"themes/next/source/css/_common/scaffolding/scaffolding.styl","hash":"013619c472c7e4b08311c464fcbe9fcf5edde603","modified":1490345568000},{"_id":"themes/next/source/css/_common/scaffolding/tables.styl","hash":"64f5d56c08d74a338813df1265580ca0cbf0190b","modified":1490345568000},{"_id":"themes/next/source/css/_common/scaffolding/normalize.styl","hash":"ece571f38180febaf02ace8187ead8318a300ea7","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_header.styl","hash":"5ae7906dc7c1d9468c7f4b4a6feddddc555797a1","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_logo.styl","hash":"38e5df90c8689a71c978fd83ba74af3d4e4e5386","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_base.styl","hash":"c2d079788d6fc2e9a191ccdae94e50d55bf849dc","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_posts-expanded.styl","hash":"fda14bc35be2e1b332809b55b3d07155a833dbf4","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_menu.styl","hash":"b0dcca862cd0cc6e732e33d975b476d744911742","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/_search.styl","hash":"1452cbe674cc1d008e1e9640eb4283841058fc64","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/index.styl","hash":"9a5581a770af8964064fef7afd3e16963e45547f","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/_layout.styl","hash":"0efa036a15c18f5abb058b7c0fad1dd9ac5eed4c","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/_logo.styl","hash":"8829bc556ca38bfec4add4f15a2f028092ac6d46","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/_menu.styl","hash":"82bbaa6322764779a1ac2e2c8390ce901c7972e2","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/_search.styl","hash":"1452cbe674cc1d008e1e9640eb4283841058fc64","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/index.styl","hash":"a0e2030a606c934fb2c5c7373aaae04a1caac4c5","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/_brand.styl","hash":"c4ed249798296f60bda02351fe6404fb3ef2126f","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/_layout.styl","hash":"1eb34b9c1f6d541605ff23333eeb133e1c4daf17","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/_menu.styl","hash":"215de948be49bcf14f06d500cef9f7035e406a43","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/_sidebar.styl","hash":"e3e23751d4ad24e8714b425d768cf68e37de7ded","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/_posts.styl","hash":"2f878213cb24c5ddc18877f6d15ec5c5f57745ac","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Pisces/index.styl","hash":"69ecd6c97e7cdfd822ac8102b45ad0ede85050db","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/blank.gif","hash":"2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading.gif","hash":"1a755fb2599f3a313cc6cfdb14df043f8c14a99c","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite.png","hash":"17df19f97628e77be09c352bf27425faea248251","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading@2x.gif","hash":"273b123496a42ba45c3416adb027cd99745058b0","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/fancybox_overlay.png","hash":"b3a4ee645ba494f52840ef8412015ba0f465dbe0","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite@2x.png","hash":"30c58913f327e28f466a00f4c1ac8001b560aed8","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.css","hash":"5f163444617b6cf267342f06ac166a237bb62df9","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.js","hash":"1cf3d47b5ccb7cb6e9019c64f2a88d03a64853e4","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js","hash":"53360764b429c212f424399384417ccc233bb3be","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css","hash":"0140952c64e3f2b74ef64e050f2fe86eab6624c8","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css.map","hash":"0189d278706509412bac4745f96c83984e1d59f4","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.min.css","hash":"512c7d79033e3028a9be61b540cf1a6870c896f8","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.js","hash":"06cef196733a710e77ad7e386ced6963f092dc55","modified":1490345568000},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.min.js","hash":"2cae0f5a6c5d6f3cb993015e6863f9483fc4de18","modified":1490345568000},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js","hash":"38628e75e4412cc6f11074e03e1c6d257aae495b","modified":1490345568000},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js","hash":"214dad442a92d36af77ed0ca1d9092b16687f02f","modified":1490345568000},{"_id":"themes/next/source/js/src/schemes/pisces.js","hash":"79da92119bc246fe05d1626ac98426a83ec90a94","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1490345568000},{"_id":"themes/next/source/lib/velocity/velocity.js","hash":"9f08181baea0cc0e906703b7e5df9111b9ef3373","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/header/header.styl","hash":"ae1ca14e51de67b07dba8f61ec79ee0e2e344574","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/header/headerband.styl","hash":"d27448f199fc2f9980b601bc22b87f08b5d64dd1","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/header/menu.styl","hash":"8a2421cb9005352905fae9d41a847ae56957247e","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/header/site-meta.styl","hash":"6c00f6e0978f4d8f9a846a15579963728aaa6a17","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/header/site-nav.styl","hash":"49c2b2c14a1e7fcc810c6be4b632975d0204c281","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/footer/footer.styl","hash":"8994ffcce84deac0471532f270f97c44fea54dc0","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/highlight/diff.styl","hash":"96f32ea6c3265a3889e6abe57587f6e2a2a40dfb","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/highlight/highlight.styl","hash":"755b04edbbfbdd981a783edb09c9cc34cb79cea7","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/highlight/theme.styl","hash":"b76387934fb6bb75212b23c1a194486892cc495e","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pages/archive.styl","hash":"7778920dd105fa4de3a7ab206eeba30b1a7bac45","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pages/categories.styl","hash":"4eff5b252d7b614e500fc7d52c97ce325e57d3ab","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pages/pages.styl","hash":"2039590632bba3943c39319d80ef630af7928185","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pages/schedule.styl","hash":"a82afbb72d83ee394aedc7b37ac0008a9823b4f4","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/pages/post-detail.styl","hash":"9bf4362a4d0ae151ada84b219d39fbe5bb8c790e","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-author-links.styl","hash":"2e7ec9aaa3293941106b1bdd09055246aa3c3dc6","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-author.styl","hash":"920343e41c124221a17f050bbb989494d44f7a24","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-blogroll.styl","hash":"5f6ea57aabfa30a437059bf8352f1ad829dbd4ff","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-feed-link.styl","hash":"9486ddd2cb255227db102d09a7df4cae0fabad72","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-nav.styl","hash":"45fa7193435a8eae9960267438750b4c9fa9587f","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-toc.styl","hash":"7690b9596ec3a49befbe529a5a2649abec0faf76","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-toggle.styl","hash":"a2ec22ef4a6817bbb2abe8660fcd99fe4ca0cc5e","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar.styl","hash":"234facd038f144bd0fe09a31ed1357c5d74c517f","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/sidebar/site-state.styl","hash":"3623e7fa4324ec1307370f33d8f287a9e20a5578","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-button.styl","hash":"beccb53dcd658136fb91a0c5678dea8f37d6e0b6","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-collapse.styl","hash":"8fae54591877a73dff0b29b2be2e8935e3c63575","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-copyright.styl","hash":"f54367c0feda6986c030cc4d15a0ca6ceea14bcb","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-eof.styl","hash":"2cdc094ecf907a02fce25ad4a607cd5c40da0f2b","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-expand.styl","hash":"b25132fe6a7ad67059a2c3afc60feabb479bdd75","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-meta.styl","hash":"b9a2e76f019a5941191f1263b54aef7b69c48789","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-nav.styl","hash":"a5d8617a24d7cb6c5ad91ea621183ca2c0917331","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-gallery.styl","hash":"387ce23bba52b22a586b2dfb4ec618fe1ffd3926","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-reward.styl","hash":"e792c8dc41561c96d128e9b421187f1c3dc978a0","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-tags.styl","hash":"a352ae5b1f8857393bf770d2e638bf15f0c9585d","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-title.styl","hash":"963105a531403d7aad6d9e5e23e3bfabb8ec065a","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post-type.styl","hash":"10251257aceecb117233c9554dcf8ecfef8e2104","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/post/post.styl","hash":"8c0276883398651336853d5ec0e9da267a00dd86","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/blockquote-center.styl","hash":"c2abe4d87148e23e15d49ee225bc650de60baf46","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/exturl.styl","hash":"1b3cc9f4e5a7f6e05b4100e9990b37b20d4a2005","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/full-image.styl","hash":"b8969e1654eec89a0fd10d88b337fee9cb03cd44","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/group-pictures.styl","hash":"4851b981020c5cbc354a1af9b831a2dcb3cf9d39","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/note.styl","hash":"74d0ba86f698165d13402670382a822c8736a556","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/tags/tags.styl","hash":"dd310c2d999185e881db007360176ee2f811df10","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/algolia-search.styl","hash":"fd42777b9125fd8969dc39d4f15473e2b91b4142","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/baidushare.styl","hash":"93b08815c4d17e2b96fef8530ec1f1064dede6ef","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/busuanzi-counter.styl","hash":"d4e6d8d7b34dc69994593c208f875ae8f7e8a3ae","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/duoshuo.styl","hash":"2340dd9b3202c61d73cc708b790fac5adddbfc7f","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/gentie.styl","hash":"586a3ec0f1015e7207cd6a2474362e068c341744","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/localsearch.styl","hash":"173490e21bece35a34858e8e534cf86e34561350","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/jiathis.styl","hash":"327b5f63d55ec26f7663185c1a778440588d9803","modified":1490345568000},{"_id":"themes/next/source/css/_common/components/third-party/third-party.styl","hash":"42348219db93a85d2ee23cb06cebd4d8ab121726","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/outline/outline.styl","hash":"5dc4859c66305f871e56cba78f64bfe3bf1b5f01","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl","hash":"817587e46df49e819858c8ecbafa08b53d5ff040","modified":1490345568000},{"_id":"themes/next/source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl","hash":"817587e46df49e819858c8ecbafa08b53d5ff040","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/fancybox_buttons.png","hash":"e385b139516c6813dcd64b8fc431c364ceafe5f3","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","hash":"1a9d8e5c22b371fcc69d4dbbb823d9c39f04c0c8","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","hash":"91e41741c2e93f732c82aaacec4cfc6e3f3ec876","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","hash":"4ac329c16a5277592fc12a37cca3d72ca4ec292f","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-media.js","hash":"3bdf69ed2469e4fb57f5a95f17300eef891ff90d","modified":1490345568000},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","hash":"53e194f4a72e649c04fb586dd57762b8c022800b","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1490345568000},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.js","hash":"9ccc6f8144f54e86df9a3fd33a18368d81cf3a4f","modified":1490345568000},{"_id":"themes/next/source/lib/three/three.min.js","hash":"73f4cdc17e51a72b9bf5b9291f65386d615c483b","modified":1490345568000},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1490345568000},{"_id":"public/search.xml","hash":"14e9828b07750bcc8ccebd67ad2cf75c780974a2","modified":1495642960486},{"_id":"public/tags/index.html","hash":"f013d30e847b8bc78e7bf04f89ae3927f5c54508","modified":1495642960533},{"_id":"public/categories/index.html","hash":"8f3b2c2e6d636e9e3fe24a4e0f10e6285f2a7fb9","modified":1495642960533},{"_id":"public/categories/日常小记/index.html","hash":"5ee0e84d3760b68bcb5eaaddb47bc9ff31bba3e0","modified":1495642960533},{"_id":"public/categories/Java/index.html","hash":"b54ecfd4a7bdac5fb41870ade23cf33e92a26098","modified":1495642960533},{"_id":"public/categories/博客搭建/index.html","hash":"56c45913faa8d07bb08779c8831eeea78fecf87f","modified":1495642960533},{"_id":"public/tags/心情/index.html","hash":"77734eaf4301bbaa342a3ec49be84c59619e7b16","modified":1495642960533},{"_id":"public/tags/感悟/index.html","hash":"2cfa3f45c0326cc3d7f68a54444e1296677e46ac","modified":1495642960533},{"_id":"public/tags/Java/index.html","hash":"f8bf203bcc7b6b9b8e149fa2cececb25dbe59b65","modified":1495642960533},{"_id":"public/tags/线程池/index.html","hash":"2b68d235ac9c3161e052a524037ce0d4476562d7","modified":1495642960533},{"_id":"public/tags/Hexo/index.html","hash":"6bd2ad2986bc674b51af102fcd3f7fa0bbea04a2","modified":1495642960533},{"_id":"public/2017/05/24/hello-world/index.html","hash":"4faacaa851320443acc07aaab0a219effa045d87","modified":1495642960533},{"_id":"public/2017/05/24/Java-hread-pool-001/index.html","hash":"ce36517c6e30d1dd2531a696fa3071ebf0f367e1","modified":1495642960534},{"_id":"public/2017/05/22/心情小记/index.html","hash":"463c69fc567959707bc30b23cff44af3a61096fe","modified":1495642960534},{"_id":"public/archives/index.html","hash":"8cd6732131c56647e7559f7c55519ef467a4f258","modified":1495642960534},{"_id":"public/archives/2017/index.html","hash":"a95e1495321e82ea9d0d814c6285d9e6bf2d89f7","modified":1495642960534},{"_id":"public/archives/2017/05/index.html","hash":"415c6a07df322dfd0d313a8a7526e2908edaef63","modified":1495642960534},{"_id":"public/index.html","hash":"e59d18fe92a92292e1660a9608ad75228c339e96","modified":1495642960534},{"_id":"public/tags/博客/index.html","hash":"88a2ae3482125a59ca923e155f71437951ccda2c","modified":1495642960540},{"_id":"public/images/java_001.jpg","hash":"7abb1120c18a88b3b5a8d3dc25c21341f5f2795d","modified":1495642960540},{"_id":"public/images/java_003.png","hash":"7fd9befd604a1fafdb7217cc89ce64ba9bfce0d7","modified":1495642960540},{"_id":"public/images/algolia_logo.svg","hash":"90035272fa31a3f65b3c0e2cb8a633876ef457dc","modified":1495642960540},{"_id":"public/images/cc-by-nc-nd.svg","hash":"c6524ece3f8039a5f612feaf865d21ec8a794564","modified":1495642960541},{"_id":"public/images/java_002.jpg","hash":"8c4e84f6545a5de3a3acf78f7bb5ffb2b0a27ea3","modified":1495642960541},{"_id":"public/images/avatar.gif","hash":"264082bb3a1af70d5499c7d22b0902cb454b6d12","modified":1495642960541},{"_id":"public/images/cc-by-nc-sa.svg","hash":"3031be41e8753c70508aa88e84ed8f4f653f157e","modified":1495642960541},{"_id":"public/images/cc-by-nc.svg","hash":"8d39b39d88f8501c0d27f8df9aae47136ebc59b7","modified":1495642960541},{"_id":"public/images/cc-by-nd.svg","hash":"c563508ce9ced1e66948024ba1153400ac0e0621","modified":1495642960541},{"_id":"public/images/cc-by-sa.svg","hash":"aa4742d733c8af8d38d4c183b8adbdcab045872e","modified":1495642960541},{"_id":"public/images/cc-zero.svg","hash":"87669bf8ac268a91d027a0a4802c92a1473e9030","modified":1495642960541},{"_id":"public/images/cc-by.svg","hash":"28a0a4fe355a974a5e42f68031652b76798d4f7e","modified":1495642960541},{"_id":"public/images/loading.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1495642960541},{"_id":"public/images/placeholder.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1495642960541},{"_id":"public/images/logo.jpeg","hash":"8eeb6b26264c5f16115c8181a8ef8c11e2509218","modified":1495642960541},{"_id":"public/images/quote-r.svg","hash":"e60ae504f9d99b712c793c3740c6b100d057d4ec","modified":1495642960541},{"_id":"public/images/quote-l.svg","hash":"94e870b4c8c48da61d09522196d4dd40e277a98f","modified":1495642960541},{"_id":"public/images/searchicon.png","hash":"67727a6a969be0b2659b908518fa6706eed307b8","modified":1495642960541},{"_id":"public/lib/font-awesome/HELP-US-OUT.txt","hash":"4f7bf961f1bed448f6ba99aeb9219fabf930ba96","modified":1495642960541},{"_id":"public/lib/fastclick/LICENSE","hash":"dcd5b6b43095d9e90353a28b09cb269de8d4838e","modified":1495642960541},{"_id":"public/lib/fancybox/source/blank.gif","hash":"2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a","modified":1495642960541},{"_id":"public/lib/fancybox/source/fancybox_sprite.png","hash":"17df19f97628e77be09c352bf27425faea248251","modified":1495642960541},{"_id":"public/lib/fancybox/source/fancybox_loading.gif","hash":"1a755fb2599f3a313cc6cfdb14df043f8c14a99c","modified":1495642960541},{"_id":"public/lib/fancybox/source/fancybox_loading@2x.gif","hash":"273b123496a42ba45c3416adb027cd99745058b0","modified":1495642960541},{"_id":"public/lib/fancybox/source/fancybox_sprite@2x.png","hash":"30c58913f327e28f466a00f4c1ac8001b560aed8","modified":1495642960541},{"_id":"public/lib/fancybox/source/fancybox_overlay.png","hash":"b3a4ee645ba494f52840ef8412015ba0f465dbe0","modified":1495642960541},{"_id":"public/lib/font-awesome/css/font-awesome.css.map","hash":"0189d278706509412bac4745f96c83984e1d59f4","modified":1495642960541},{"_id":"public/lib/fancybox/source/helpers/fancybox_buttons.png","hash":"e385b139516c6813dcd64b8fc431c364ceafe5f3","modified":1495642960541},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1495642961113},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1495642961113},{"_id":"public/lib/algolia-instant-search/instantsearch.min.css","hash":"90ef19edc982645b118b095615838d9c5eaba0de","modified":1495642961129},{"_id":"public/lib/font-awesome/bower.json","hash":"64394a2a9aa00f8e321d8daa5e51a420f0e96dad","modified":1495642961129},{"_id":"public/lib/canvas-nest/canvas-nest.min.js","hash":"0387e75e23b1db108a755073fe52a0d03eb391a7","modified":1495642961129},{"_id":"public/lib/fastclick/README.html","hash":"da3c74d484c73cc7df565e8abbfa4d6a5a18d4da","modified":1495642961129},{"_id":"public/lib/jquery_lazyload/CONTRIBUTING.html","hash":"a6358170d346af13b1452ac157b60505bec7015c","modified":1495642961129},{"_id":"public/lib/fastclick/bower.json","hash":"4dcecf83afddba148464d5339c93f6d0aa9f42e9","modified":1495642961129},{"_id":"public/lib/jquery_lazyload/README.html","hash":"bde24335f6bc09d8801c0dcd7274f71b466552bd","modified":1495642961129},{"_id":"public/lib/jquery_lazyload/jquery.lazyload.js","hash":"481fd478650e12b67c201a0ea41e92743f8b45a3","modified":1495642961129},{"_id":"public/lib/jquery_lazyload/bower.json","hash":"ae3c3b61e6e7f9e1d7e3585ad854380ecc04cf53","modified":1495642961129},{"_id":"public/lib/jquery_lazyload/jquery.scrollstop.js","hash":"0e9a81785a011c98be5ea821a8ed7d411818cfd1","modified":1495642961129},{"_id":"public/lib/velocity/bower.json","hash":"0ef14e7ccdfba5db6eb3f8fc6aa3b47282c36409","modified":1495642961129},{"_id":"public/lib/velocity/velocity.ui.min.js","hash":"ed5e534cd680a25d8d14429af824f38a2c7d9908","modified":1495642961129},{"_id":"public/js/src/bootstrap.js","hash":"aab7be0a6e2724b3faa9338db93c19556c559625","modified":1495642961129},{"_id":"public/js/src/affix.js","hash":"978e0422b5bf1b560236d8d10ebc1adcf66392e3","modified":1495642961129},{"_id":"public/js/src/algolia-search.js","hash":"b172f697ed339a24b1e80261075232978d164c35","modified":1495642961129},{"_id":"public/js/src/exturl.js","hash":"e42e2aaab7bf4c19a0c8e779140e079c6aa5c0b1","modified":1495642961129},{"_id":"public/js/src/hook-duoshuo.js","hash":"a6119070c0119f33e08b29da7d2cce2635eb40a0","modified":1495642961129},{"_id":"public/js/src/motion.js","hash":"269414e84df544a4ccb88519f6abae4943db3c67","modified":1495642961129},{"_id":"public/js/src/post-details.js","hash":"af7a417dd1cb02465a7b98211653e7c6192e6d55","modified":1495642961129},{"_id":"public/js/src/scrollspy.js","hash":"fe4da1b9fe73518226446f5f27d2831e4426fc35","modified":1495642961129},{"_id":"public/js/src/utils.js","hash":"e13c9ccf70d593bdf3b8cc1d768f595abd610e6e","modified":1495642961129},{"_id":"public/lib/fancybox/source/jquery.fancybox.css","hash":"5f163444617b6cf267342f06ac166a237bb62df9","modified":1495642961129},{"_id":"public/lib/ua-parser-js/dist/ua-parser.min.js","hash":"38628e75e4412cc6f11074e03e1c6d257aae495b","modified":1495642961129},{"_id":"public/lib/fastclick/lib/fastclick.min.js","hash":"2cae0f5a6c5d6f3cb993015e6863f9483fc4de18","modified":1495642961129},{"_id":"public/js/src/schemes/pisces.js","hash":"79da92119bc246fe05d1626ac98426a83ec90a94","modified":1495642961129},{"_id":"public/lib/ua-parser-js/dist/ua-parser.pack.js","hash":"214dad442a92d36af77ed0ca1d9092b16687f02f","modified":1495642961129},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","hash":"1a9d8e5c22b371fcc69d4dbbb823d9c39f04c0c8","modified":1495642961129},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","hash":"91e41741c2e93f732c82aaacec4cfc6e3f3ec876","modified":1495642961129},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","hash":"4ac329c16a5277592fc12a37cca3d72ca4ec292f","modified":1495642961129},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-media.js","hash":"3bdf69ed2469e4fb57f5a95f17300eef891ff90d","modified":1495642961129},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","hash":"53e194f4a72e649c04fb586dd57762b8c022800b","modified":1495642961129},{"_id":"public/css/main.css","hash":"f1137a5815856f1d375b6e5cbac74728b5048d2f","modified":1495642961129},{"_id":"public/lib/velocity/velocity.ui.js","hash":"6a1d101eab3de87527bb54fcc8c7b36b79d8f0df","modified":1495642961129},{"_id":"public/lib/velocity/velocity.min.js","hash":"2f1afadc12e4cf59ef3b405308d21baa97e739c6","modified":1495642961129},{"_id":"public/lib/three/three-waves.min.js","hash":"5b38ae00297ffc07f433c632c3dbf7bde4cdf39a","modified":1495642961129},{"_id":"public/lib/jquery/index.js","hash":"41b4bfbaa96be6d1440db6e78004ade1c134e276","modified":1495642961129},{"_id":"public/lib/fancybox/source/jquery.fancybox.pack.js","hash":"53360764b429c212f424399384417ccc233bb3be","modified":1495642961129},{"_id":"public/lib/fancybox/source/jquery.fancybox.js","hash":"1cf3d47b5ccb7cb6e9019c64f2a88d03a64853e4","modified":1495642961129},{"_id":"public/lib/font-awesome/css/font-awesome.css","hash":"0140952c64e3f2b74ef64e050f2fe86eab6624c8","modified":1495642961129},{"_id":"public/lib/font-awesome/css/font-awesome.min.css","hash":"512c7d79033e3028a9be61b540cf1a6870c896f8","modified":1495642961129},{"_id":"public/lib/fastclick/lib/fastclick.js","hash":"06cef196733a710e77ad7e386ced6963f092dc55","modified":1495642961129},{"_id":"public/lib/velocity/velocity.js","hash":"9f08181baea0cc0e906703b7e5df9111b9ef3373","modified":1495642961129},{"_id":"public/lib/algolia-instant-search/instantsearch.min.js","hash":"9ccc6f8144f54e86df9a3fd33a18368d81cf3a4f","modified":1495642961129},{"_id":"public/lib/three/three.min.js","hash":"73f4cdc17e51a72b9bf5b9291f65386d615c483b","modified":1495642961129},{"_id":"public/lib/font-awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1495642961129},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1495642961129},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1495642961129},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1495642961207}],"Category":[{"name":"日常小记","_id":"cj337799r00042kaj57t49uod"},{"name":"Java","_id":"cj337799r00072kaj357hbjx1"},{"name":"博客搭建","_id":"cj337799r000a2kajn9q0mlsc"}],"Data":[],"Page":[{"title":"分类","date":"2017-05-23T15:27:06.000Z","type":"categories","_content":"","source":"categories/index.md","raw":"---\ntitle: 分类\ndate: 2017-05-23 23:27:06\ntype: \"categories\"\n---\n","updated":"2017-05-23T15:28:14.597Z","path":"categories/index.html","comments":1,"layout":"page","_id":"cj337799b00012kajckpcfkd0","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"标签","date":"2017-05-23T15:31:52.000Z","type":"tags","_content":"","source":"tags/index.md","raw":"---\ntitle: 标签\ndate: 2017-05-23 23:31:52\ntype: \"tags\"\n---\n","updated":"2017-05-23T15:32:29.277Z","path":"tags/index.html","comments":1,"layout":"page","_id":"cj337799r00032kajfoved3dg","content":"","site":{"data":{}},"excerpt":"","more":""}],"Post":[{"title":"心情小记","date":"2017-05-21T16:34:10.000Z","_content":"### 心情小记\n\n```\n今天读了得到之后,看到了一句话,要成为别人最需要的人。因为需求决定价格。\n```","source":"_posts/心情小记.md","raw":"---\ntitle: 心情小记\ndate: 2017-05-22 00:34:10\ntags: [心情, 感悟]\ncategory: 日常小记\n---\n### 心情小记\n\n```\n今天读了得到之后,看到了一句话,要成为别人最需要的人。因为需求决定价格。\n```","slug":"心情小记","published":1,"updated":"2017-05-24T14:40:24.755Z","comments":1,"layout":"post","photos":[],"link":"","_id":"cj337798v00002kajwfqvn356","content":"<h3 id=\"心情小记\"><a href=\"#心情小记\" class=\"headerlink\" title=\"心情小记\"></a>心情小记</h3><figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">今天读了得到之后,看到了一句话,要成为别人最需要的人。因为需求决定价格。</div></pre></td></tr></table></figure>","site":{"data":{}},"excerpt":"","more":"<h3 id=\"心情小记\"><a href=\"#心情小记\" class=\"headerlink\" title=\"心情小记\"></a>心情小记</h3><figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">今天读了得到之后,看到了一句话,要成为别人最需要的人。因为需求决定价格。</div></pre></td></tr></table></figure>"},{"title":"Java多线程Thread,Runnable, Callable<>和线程池(一)","date":"2017-05-24T13:34:10.000Z","_content":"\n这一篇主要关注于我们自己实现和管理多线程,后面会介绍使用线程池实现多线程。\nJava里面实现多线程有三种方式,继承 Thead类,或者实现Runnable和Callable<>接口。下面详细介绍一下这三种实现方式。\n\n# 1. Thread实现多线程\n使用Thread实现,我们只需要继承Thread类,重写(overwirte)run方法。\n```java\nclass ThreadDemo extends Thread {\n\tprivate String threadFlag;\n\tprivate long sleepTime = 100;\n\n\tpublic ThreadDemo(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic ThreadDemo(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\t//重写run方法\n\tpublic void run() {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\ttry {\n\t\t\tfor (int i = 0; i < 6; i++) {\n\t\t\t\tSystem.out.println(this.threadFlag + i);\n\t\t\t\tThread.sleep(this.sleepTime);\n\t\t\t}\n\t\t} catch (InterruptedException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t}\n}\n```\n<!-- more -->\nThreadDemo类继承自Thread类,重写了Thread类的run()方法。当ThreadDemo调用start()方法的时候,run()方法会被调用。\n下面是测试方法:\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tThread tA = new ThreadDemo(\"Thread-A\");\n\t\ttA.start();\n\n\t\tThread tB = new ThreadDemo(\"Thread-B\");\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\n\t}\n}\n```\n测试方法里面创建了两个线程tA,tB,下面是执行的结果,可以看到tA和tB是没有先后顺序的,是两个独立的线程。**\"During Time:2\"**是主线程里面的语句,但是它在tA和tB没有执行完成的时候,已经开始执行。\n说明这两个线程并没有阻塞主线程。\n![测试结果](/images/java_001.jpg)\n\n# 2. Runnable实现多线程\n另外一种实现多线程的方法是implement Runnable接口\n```java\nclass RunnableImpl implements Runnable {\n\n\tprivate String threadFlag;\n\tprivate long sleepTime = 100;\n\n\tpublic RunnableImpl(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic RunnableImpl(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\n\t@Override\n\tpublic void run() {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\ttry {\n\t\t\tfor (int i = 0; i < 6; i++) {\n\t\t\t\tSystem.out.println(this.threadFlag + i);\n\t\t\t\tThread.sleep(this.sleepTime);\n\t\t\t}\n\t\t} catch (InterruptedException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t}\n\n}\n```\nRunnableImpl类实现了Runnable接口,实现了run()方法,是用start的方法去启动改线程。下面是测试方法和结果:\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tThread tA = new Thread(new RunnableImpl(\"Thread-A\"));\n\t\ttA.start();\n\n\t\tThread tB = new Thread(new RunnableImpl(\"Thread-B\", 400));\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\t}\n}\n```\n![这里写图片描述](/images/java_002.jpg)\n\n使用RunnableImpl和Thread去创建两个线程tA和tB,从结果中看到tA和tB也是并发执行的,他们是随机的获取CPU的执行时间。**\"During time:4\"**在两个线程没有执行完成的时候已经输出了。说明这两个线程也没有阻塞主线程。\n# 3. Callable<>实现多线程\n观察Thread和Runnable实现的线程,你会发现这两种实现,你是无法知道线程的执行状态的,例如:线程是否执行完成了,线程有没有被cancel等等。如果你需要基于线程的状态做些事情,就需要很多而外的工作。为了解决这些问题,Callable<>就应运而生了,它和FutureTask结合可以很好的解决这个问题。FutureTask一般有两个用途。\n1.获取异步的结果和取消任务。\n2. 高并发的情况下确保任务只会执行一次。\n```java\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.FutureTask;\n\nclass CallableDemo implements Callable<String> {\n\n\tprivate String threadFlag;\n\tprivate long sleepTime = 400;\n\n\tpublic CallableDemo(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic CallableDemo(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\n\t@Override\n\tpublic String call() throws Exception {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\tThread.sleep(this.sleepTime);\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t\treturn this.threadFlag + \" success in this time\";\n\t}\n\n}\n```\n这里CallableImpl实现了Callable接口,实现了里面的call()方法,这个接口是泛型化的接口,接口的类型就是call()方法的返回值类型。下面是测试代码:\n\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tFutureTask<String> futureA = new FutureTask<String>(new CallableDemo(\"Thread-A\", 5000));\n\t\tThread tA = new Thread(futureA);\n\t\ttA.start();\n\t\tSystem.out.println(\"Thread is Done: \" + futureA.isDone());\n\t\tSystem.out.println(futureA.get());\n\t\tSystem.out.println(\"Thread is Done: \" + futureA.isDone());\n\t\tFutureTask<String> futureB = new FutureTask<String>(new CallableDemo(\"Thread-B\", 400));\n\t\tThread tB = new Thread(futureB);\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\n\t}\n}\n```\n这里也是实现了两个线程tA和tB,和上面Thread和Runnable的不同之处在于,这里使用futureA和futureB来获取两个线程的执行状态。futureA.isDone()。这两需要着重说的是futureA.get().这个方法的意思是:主线程等待tA执行完成。这个方法是会阻塞主线程的运行。下面是测试结果:\n![这里写图片描述](/images/java_003.png)\n可以看到被标记的就是返回值,这是通过get()方法得到的,主线程会成tA执行完成之后,才会继续向下执行,而tB没有调用futureB.get(),所以tB没有阻塞主线程,和主线程是并发的。可以看到**'During time: 5003'**在tB没有执行完成的时候已经被执行。\n# 4. 总结\n这篇主要介绍了自己实现多线程的三种方式:\n\n1. extends Thread,重写run()方法\n2. implements Runnable, 实现run()方法\n3. implements Callable<>,实现call()方法,可以获取线程的执行状态信息,isDone(),isCancelled()\n\n下一篇我们会介绍,线程并发时候的共享资源问题。\n","source":"_posts/Java-hread-pool-001.md","raw":"---\ntitle: Java多线程Thread,Runnable, Callable<>和线程池(一)\ndate: 2017-05-24 21:34:10\ntags: [Java, 线程池]\ncategory: Java\n---\n\n这一篇主要关注于我们自己实现和管理多线程,后面会介绍使用线程池实现多线程。\nJava里面实现多线程有三种方式,继承 Thead类,或者实现Runnable和Callable<>接口。下面详细介绍一下这三种实现方式。\n\n# 1. Thread实现多线程\n使用Thread实现,我们只需要继承Thread类,重写(overwirte)run方法。\n```java\nclass ThreadDemo extends Thread {\n\tprivate String threadFlag;\n\tprivate long sleepTime = 100;\n\n\tpublic ThreadDemo(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic ThreadDemo(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\t//重写run方法\n\tpublic void run() {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\ttry {\n\t\t\tfor (int i = 0; i < 6; i++) {\n\t\t\t\tSystem.out.println(this.threadFlag + i);\n\t\t\t\tThread.sleep(this.sleepTime);\n\t\t\t}\n\t\t} catch (InterruptedException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t}\n}\n```\n<!-- more -->\nThreadDemo类继承自Thread类,重写了Thread类的run()方法。当ThreadDemo调用start()方法的时候,run()方法会被调用。\n下面是测试方法:\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tThread tA = new ThreadDemo(\"Thread-A\");\n\t\ttA.start();\n\n\t\tThread tB = new ThreadDemo(\"Thread-B\");\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\n\t}\n}\n```\n测试方法里面创建了两个线程tA,tB,下面是执行的结果,可以看到tA和tB是没有先后顺序的,是两个独立的线程。**\"During Time:2\"**是主线程里面的语句,但是它在tA和tB没有执行完成的时候,已经开始执行。\n说明这两个线程并没有阻塞主线程。\n![测试结果](/images/java_001.jpg)\n\n# 2. Runnable实现多线程\n另外一种实现多线程的方法是implement Runnable接口\n```java\nclass RunnableImpl implements Runnable {\n\n\tprivate String threadFlag;\n\tprivate long sleepTime = 100;\n\n\tpublic RunnableImpl(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic RunnableImpl(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\n\t@Override\n\tpublic void run() {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\ttry {\n\t\t\tfor (int i = 0; i < 6; i++) {\n\t\t\t\tSystem.out.println(this.threadFlag + i);\n\t\t\t\tThread.sleep(this.sleepTime);\n\t\t\t}\n\t\t} catch (InterruptedException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t}\n\n}\n```\nRunnableImpl类实现了Runnable接口,实现了run()方法,是用start的方法去启动改线程。下面是测试方法和结果:\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tThread tA = new Thread(new RunnableImpl(\"Thread-A\"));\n\t\ttA.start();\n\n\t\tThread tB = new Thread(new RunnableImpl(\"Thread-B\", 400));\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\t}\n}\n```\n![这里写图片描述](/images/java_002.jpg)\n\n使用RunnableImpl和Thread去创建两个线程tA和tB,从结果中看到tA和tB也是并发执行的,他们是随机的获取CPU的执行时间。**\"During time:4\"**在两个线程没有执行完成的时候已经输出了。说明这两个线程也没有阻塞主线程。\n# 3. Callable<>实现多线程\n观察Thread和Runnable实现的线程,你会发现这两种实现,你是无法知道线程的执行状态的,例如:线程是否执行完成了,线程有没有被cancel等等。如果你需要基于线程的状态做些事情,就需要很多而外的工作。为了解决这些问题,Callable<>就应运而生了,它和FutureTask结合可以很好的解决这个问题。FutureTask一般有两个用途。\n1.获取异步的结果和取消任务。\n2. 高并发的情况下确保任务只会执行一次。\n```java\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.FutureTask;\n\nclass CallableDemo implements Callable<String> {\n\n\tprivate String threadFlag;\n\tprivate long sleepTime = 400;\n\n\tpublic CallableDemo(String threadFlag) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t}\n\n\tpublic CallableDemo(String threadFlag, long sleepTime) {\n\t\tSystem.out.println(\"Construct \" + threadFlag);\n\t\tthis.threadFlag = threadFlag;\n\t\tthis.sleepTime = sleepTime;\n\t}\n\n\t@Override\n\tpublic String call() throws Exception {\n\t\tSystem.out.println(\"Running before: \" + this.threadFlag);\n\t\tThread.sleep(this.sleepTime);\n\t\tSystem.out.println(\"Running after:\" + this.threadFlag);\n\t\treturn this.threadFlag + \" success in this time\";\n\t}\n\n}\n```\n这里CallableImpl实现了Callable接口,实现了里面的call()方法,这个接口是泛型化的接口,接口的类型就是call()方法的返回值类型。下面是测试代码:\n\n```java\npublic class ConcurrentThread {\n\n\tpublic static void main(String[] args) throws InterruptedException, ExecutionException {\n\n\t\tlong start = System.currentTimeMillis();\n\t\tFutureTask<String> futureA = new FutureTask<String>(new CallableDemo(\"Thread-A\", 5000));\n\t\tThread tA = new Thread(futureA);\n\t\ttA.start();\n\t\tSystem.out.println(\"Thread is Done: \" + futureA.isDone());\n\t\tSystem.out.println(futureA.get());\n\t\tSystem.out.println(\"Thread is Done: \" + futureA.isDone());\n\t\tFutureTask<String> futureB = new FutureTask<String>(new CallableDemo(\"Thread-B\", 400));\n\t\tThread tB = new Thread(futureB);\n\t\ttB.start();\n\t\tlong end = System.currentTimeMillis();\n\t\tSystem.out.println(\"During time: \" + (end - start));\n\n\t}\n}\n```\n这里也是实现了两个线程tA和tB,和上面Thread和Runnable的不同之处在于,这里使用futureA和futureB来获取两个线程的执行状态。futureA.isDone()。这两需要着重说的是futureA.get().这个方法的意思是:主线程等待tA执行完成。这个方法是会阻塞主线程的运行。下面是测试结果:\n![这里写图片描述](/images/java_003.png)\n可以看到被标记的就是返回值,这是通过get()方法得到的,主线程会成tA执行完成之后,才会继续向下执行,而tB没有调用futureB.get(),所以tB没有阻塞主线程,和主线程是并发的。可以看到**'During time: 5003'**在tB没有执行完成的时候已经被执行。\n# 4. 总结\n这篇主要介绍了自己实现多线程的三种方式:\n\n1. extends Thread,重写run()方法\n2. implements Runnable, 实现run()方法\n3. implements Callable<>,实现call()方法,可以获取线程的执行状态信息,isDone(),isCancelled()\n\n下一篇我们会介绍,线程并发时候的共享资源问题。\n","slug":"Java-hread-pool-001","published":1,"updated":"2017-05-24T14:37:22.939Z","comments":1,"layout":"post","photos":[],"link":"","_id":"cj337799r00022kajvj0oczuj","content":"<p>这一篇主要关注于我们自己实现和管理多线程,后面会介绍使用线程池实现多线程。<br>Java里面实现多线程有三种方式,继承 Thead类,或者实现Runnable和Callable<>接口。下面详细介绍一下这三种实现方式。</p>\n<h1 id=\"1-Thread实现多线程\"><a href=\"#1-Thread实现多线程\" class=\"headerlink\" title=\"1. Thread实现多线程\"></a>1. Thread实现多线程</h1><p>使用Thread实现,我们只需要继承Thread类,重写(overwirte)run方法。<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ThreadDemo</span> <span class=\"keyword\">extends</span> <span class=\"title\">Thread</span> </span>{</div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">100</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">ThreadDemo</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">ThreadDemo</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\">\t<span class=\"comment\">//重写run方法</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">void</span> <span class=\"title\">run</span><span class=\"params\">()</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">try</span> {</div><div class=\"line\">\t\t\t<span class=\"keyword\">for</span> (<span class=\"keyword\">int</span> i = <span class=\"number\">0</span>; i < <span class=\"number\">6</span>; i++) {</div><div class=\"line\">\t\t\t\tSystem.out.println(<span class=\"keyword\">this</span>.threadFlag + i);</div><div class=\"line\">\t\t\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\t\t}</div><div class=\"line\">\t\t} <span class=\"keyword\">catch</span> (InterruptedException e) {</div><div class=\"line\">\t\t\te.printStackTrace();</div><div class=\"line\">\t\t}</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<a id=\"more\"></a>\n<p>ThreadDemo类继承自Thread类,重写了Thread类的run()方法。当ThreadDemo调用start()方法的时候,run()方法会被调用。<br>下面是测试方法:<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> ThreadDemo(<span class=\"string\">\"Thread-A\"</span>);</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\"></div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> ThreadDemo(<span class=\"string\">\"Thread-B\"</span>);</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\"></div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p>测试方法里面创建了两个线程tA,tB,下面是执行的结果,可以看到tA和tB是没有先后顺序的,是两个独立的线程。<strong>“During Time:2”</strong>是主线程里面的语句,但是它在tA和tB没有执行完成的时候,已经开始执行。<br>说明这两个线程并没有阻塞主线程。<br><img src=\"/images/java_001.jpg\" alt=\"测试结果\"></p>\n<h1 id=\"2-Runnable实现多线程\"><a href=\"#2-Runnable实现多线程\" class=\"headerlink\" title=\"2. Runnable实现多线程\"></a>2. Runnable实现多线程</h1><p>另外一种实现多线程的方法是implement Runnable接口<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div><div class=\"line\">29</div><div class=\"line\">30</div><div class=\"line\">31</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">RunnableImpl</span> <span class=\"keyword\">implements</span> <span class=\"title\">Runnable</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">100</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">RunnableImpl</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">RunnableImpl</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"meta\">@Override</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">void</span> <span class=\"title\">run</span><span class=\"params\">()</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">try</span> {</div><div class=\"line\">\t\t\t<span class=\"keyword\">for</span> (<span class=\"keyword\">int</span> i = <span class=\"number\">0</span>; i < <span class=\"number\">6</span>; i++) {</div><div class=\"line\">\t\t\t\tSystem.out.println(<span class=\"keyword\">this</span>.threadFlag + i);</div><div class=\"line\">\t\t\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\t\t}</div><div class=\"line\">\t\t} <span class=\"keyword\">catch</span> (InterruptedException e) {</div><div class=\"line\">\t\t\te.printStackTrace();</div><div class=\"line\">\t\t}</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p>RunnableImpl类实现了Runnable接口,实现了run()方法,是用start的方法去启动改线程。下面是测试方法和结果:<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> Thread(<span class=\"keyword\">new</span> RunnableImpl(<span class=\"string\">\"Thread-A\"</span>));</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\"></div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> Thread(<span class=\"keyword\">new</span> RunnableImpl(<span class=\"string\">\"Thread-B\"</span>, <span class=\"number\">400</span>));</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p><img src=\"/images/java_002.jpg\" alt=\"这里写图片描述\"></p>\n<p>使用RunnableImpl和Thread去创建两个线程tA和tB,从结果中看到tA和tB也是并发执行的,他们是随机的获取CPU的执行时间。<strong>“During time:4”</strong>在两个线程没有执行完成的时候已经输出了。说明这两个线程也没有阻塞主线程。</p>\n<h1 id=\"3-Callable-lt-gt-实现多线程\"><a href=\"#3-Callable-lt-gt-实现多线程\" class=\"headerlink\" title=\"3. Callable<>实现多线程\"></a>3. Callable<>实现多线程</h1><p>观察Thread和Runnable实现的线程,你会发现这两种实现,你是无法知道线程的执行状态的,例如:线程是否执行完成了,线程有没有被cancel等等。如果你需要基于线程的状态做些事情,就需要很多而外的工作。为了解决这些问题,Callable<>就应运而生了,它和FutureTask结合可以很好的解决这个问题。FutureTask一般有两个用途。<br>1.获取异步的结果和取消任务。</p>\n<ol>\n<li>高并发的情况下确保任务只会执行一次。<figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div><div class=\"line\">29</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.Callable;</div><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.ExecutionException;</div><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.FutureTask;</div><div class=\"line\"></div><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">CallableDemo</span> <span class=\"keyword\">implements</span> <span class=\"title\">Callable</span><<span class=\"title\">String</span>> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">400</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">CallableDemo</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">CallableDemo</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"meta\">@Override</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> String <span class=\"title\">call</span><span class=\"params\">()</span> <span class=\"keyword\">throws</span> Exception </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">return</span> <span class=\"keyword\">this</span>.threadFlag + <span class=\"string\">\" success in this time\"</span>;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">}</div></pre></td></tr></table></figure>\n</li>\n</ol>\n<p>这里CallableImpl实现了Callable接口,实现了里面的call()方法,这个接口是泛型化的接口,接口的类型就是call()方法的返回值类型。下面是测试代码:</p>\n<figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tFutureTask<String> futureA = <span class=\"keyword\">new</span> FutureTask<String>(<span class=\"keyword\">new</span> CallableDemo(<span class=\"string\">\"Thread-A\"</span>, <span class=\"number\">5000</span>));</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> Thread(futureA);</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Thread is Done: \"</span> + futureA.isDone());</div><div class=\"line\">\t\tSystem.out.println(futureA.get());</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Thread is Done: \"</span> + futureA.isDone());</div><div class=\"line\">\t\tFutureTask<String> futureB = <span class=\"keyword\">new</span> FutureTask<String>(<span class=\"keyword\">new</span> CallableDemo(<span class=\"string\">\"Thread-B\"</span>, <span class=\"number\">400</span>));</div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> Thread(futureB);</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\"></div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure>\n<p>这里也是实现了两个线程tA和tB,和上面Thread和Runnable的不同之处在于,这里使用futureA和futureB来获取两个线程的执行状态。futureA.isDone()。这两需要着重说的是futureA.get().这个方法的意思是:主线程等待tA执行完成。这个方法是会阻塞主线程的运行。下面是测试结果:<br><img src=\"/images/java_003.png\" alt=\"这里写图片描述\"><br>可以看到被标记的就是返回值,这是通过get()方法得到的,主线程会成tA执行完成之后,才会继续向下执行,而tB没有调用futureB.get(),所以tB没有阻塞主线程,和主线程是并发的。可以看到<strong>‘During time: 5003’</strong>在tB没有执行完成的时候已经被执行。</p>\n<h1 id=\"4-总结\"><a href=\"#4-总结\" class=\"headerlink\" title=\"4. 总结\"></a>4. 总结</h1><p>这篇主要介绍了自己实现多线程的三种方式:</p>\n<ol>\n<li>extends Thread,重写run()方法</li>\n<li>implements Runnable, 实现run()方法</li>\n<li>implements Callable<>,实现call()方法,可以获取线程的执行状态信息,isDone(),isCancelled()</li>\n</ol>\n<p>下一篇我们会介绍,线程并发时候的共享资源问题。</p>\n","site":{"data":{}},"excerpt":"<p>这一篇主要关注于我们自己实现和管理多线程,后面会介绍使用线程池实现多线程。<br>Java里面实现多线程有三种方式,继承 Thead类,或者实现Runnable和Callable<>接口。下面详细介绍一下这三种实现方式。</p>\n<h1 id=\"1-Thread实现多线程\"><a href=\"#1-Thread实现多线程\" class=\"headerlink\" title=\"1. Thread实现多线程\"></a>1. Thread实现多线程</h1><p>使用Thread实现,我们只需要继承Thread类,重写(overwirte)run方法。<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ThreadDemo</span> <span class=\"keyword\">extends</span> <span class=\"title\">Thread</span> </span>{</div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">100</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">ThreadDemo</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">ThreadDemo</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\">\t<span class=\"comment\">//重写run方法</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">void</span> <span class=\"title\">run</span><span class=\"params\">()</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">try</span> {</div><div class=\"line\">\t\t\t<span class=\"keyword\">for</span> (<span class=\"keyword\">int</span> i = <span class=\"number\">0</span>; i < <span class=\"number\">6</span>; i++) {</div><div class=\"line\">\t\t\t\tSystem.out.println(<span class=\"keyword\">this</span>.threadFlag + i);</div><div class=\"line\">\t\t\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\t\t}</div><div class=\"line\">\t\t} <span class=\"keyword\">catch</span> (InterruptedException e) {</div><div class=\"line\">\t\t\te.printStackTrace();</div><div class=\"line\">\t\t}</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>","more":"<p>ThreadDemo类继承自Thread类,重写了Thread类的run()方法。当ThreadDemo调用start()方法的时候,run()方法会被调用。<br>下面是测试方法:<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> ThreadDemo(<span class=\"string\">\"Thread-A\"</span>);</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\"></div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> ThreadDemo(<span class=\"string\">\"Thread-B\"</span>);</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\"></div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p>测试方法里面创建了两个线程tA,tB,下面是执行的结果,可以看到tA和tB是没有先后顺序的,是两个独立的线程。<strong>“During Time:2”</strong>是主线程里面的语句,但是它在tA和tB没有执行完成的时候,已经开始执行。<br>说明这两个线程并没有阻塞主线程。<br><img src=\"/images/java_001.jpg\" alt=\"测试结果\"></p>\n<h1 id=\"2-Runnable实现多线程\"><a href=\"#2-Runnable实现多线程\" class=\"headerlink\" title=\"2. Runnable实现多线程\"></a>2. Runnable实现多线程</h1><p>另外一种实现多线程的方法是implement Runnable接口<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div><div class=\"line\">29</div><div class=\"line\">30</div><div class=\"line\">31</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">RunnableImpl</span> <span class=\"keyword\">implements</span> <span class=\"title\">Runnable</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">100</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">RunnableImpl</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">RunnableImpl</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"meta\">@Override</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">void</span> <span class=\"title\">run</span><span class=\"params\">()</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">try</span> {</div><div class=\"line\">\t\t\t<span class=\"keyword\">for</span> (<span class=\"keyword\">int</span> i = <span class=\"number\">0</span>; i < <span class=\"number\">6</span>; i++) {</div><div class=\"line\">\t\t\t\tSystem.out.println(<span class=\"keyword\">this</span>.threadFlag + i);</div><div class=\"line\">\t\t\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\t\t}</div><div class=\"line\">\t\t} <span class=\"keyword\">catch</span> (InterruptedException e) {</div><div class=\"line\">\t\t\te.printStackTrace();</div><div class=\"line\">\t\t}</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p>RunnableImpl类实现了Runnable接口,实现了run()方法,是用start的方法去启动改线程。下面是测试方法和结果:<br><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> Thread(<span class=\"keyword\">new</span> RunnableImpl(<span class=\"string\">\"Thread-A\"</span>));</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\"></div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> Thread(<span class=\"keyword\">new</span> RunnableImpl(<span class=\"string\">\"Thread-B\"</span>, <span class=\"number\">400</span>));</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure></p>\n<p><img src=\"/images/java_002.jpg\" alt=\"这里写图片描述\"></p>\n<p>使用RunnableImpl和Thread去创建两个线程tA和tB,从结果中看到tA和tB也是并发执行的,他们是随机的获取CPU的执行时间。<strong>“During time:4”</strong>在两个线程没有执行完成的时候已经输出了。说明这两个线程也没有阻塞主线程。</p>\n<h1 id=\"3-Callable-lt-gt-实现多线程\"><a href=\"#3-Callable-lt-gt-实现多线程\" class=\"headerlink\" title=\"3. Callable<>实现多线程\"></a>3. Callable<>实现多线程</h1><p>观察Thread和Runnable实现的线程,你会发现这两种实现,你是无法知道线程的执行状态的,例如:线程是否执行完成了,线程有没有被cancel等等。如果你需要基于线程的状态做些事情,就需要很多而外的工作。为了解决这些问题,Callable<>就应运而生了,它和FutureTask结合可以很好的解决这个问题。FutureTask一般有两个用途。<br>1.获取异步的结果和取消任务。</p>\n<ol>\n<li>高并发的情况下确保任务只会执行一次。<figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div><div class=\"line\">20</div><div class=\"line\">21</div><div class=\"line\">22</div><div class=\"line\">23</div><div class=\"line\">24</div><div class=\"line\">25</div><div class=\"line\">26</div><div class=\"line\">27</div><div class=\"line\">28</div><div class=\"line\">29</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.Callable;</div><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.ExecutionException;</div><div class=\"line\"><span class=\"keyword\">import</span> java.util.concurrent.FutureTask;</div><div class=\"line\"></div><div class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">CallableDemo</span> <span class=\"keyword\">implements</span> <span class=\"title\">Callable</span><<span class=\"title\">String</span>> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"keyword\">private</span> String threadFlag;</div><div class=\"line\">\t<span class=\"keyword\">private</span> <span class=\"keyword\">long</span> sleepTime = <span class=\"number\">400</span>;</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">CallableDemo</span><span class=\"params\">(String threadFlag)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">CallableDemo</span><span class=\"params\">(String threadFlag, <span class=\"keyword\">long</span> sleepTime)</span> </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Construct \"</span> + threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.threadFlag = threadFlag;</div><div class=\"line\">\t\t<span class=\"keyword\">this</span>.sleepTime = sleepTime;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"meta\">@Override</span></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> String <span class=\"title\">call</span><span class=\"params\">()</span> <span class=\"keyword\">throws</span> Exception </span>{</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running before: \"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\tThread.sleep(<span class=\"keyword\">this</span>.sleepTime);</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Running after:\"</span> + <span class=\"keyword\">this</span>.threadFlag);</div><div class=\"line\">\t\t<span class=\"keyword\">return</span> <span class=\"keyword\">this</span>.threadFlag + <span class=\"string\">\" success in this time\"</span>;</div><div class=\"line\">\t}</div><div class=\"line\"></div><div class=\"line\">}</div></pre></td></tr></table></figure>\n</li>\n</ol>\n<p>这里CallableImpl实现了Callable接口,实现了里面的call()方法,这个接口是泛型化的接口,接口的类型就是call()方法的返回值类型。下面是测试代码:</p>\n<figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div><div class=\"line\">2</div><div class=\"line\">3</div><div class=\"line\">4</div><div class=\"line\">5</div><div class=\"line\">6</div><div class=\"line\">7</div><div class=\"line\">8</div><div class=\"line\">9</div><div class=\"line\">10</div><div class=\"line\">11</div><div class=\"line\">12</div><div class=\"line\">13</div><div class=\"line\">14</div><div class=\"line\">15</div><div class=\"line\">16</div><div class=\"line\">17</div><div class=\"line\">18</div><div class=\"line\">19</div></pre></td><td class=\"code\"><pre><div class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">ConcurrentThread</span> </span>{</div><div class=\"line\"></div><div class=\"line\">\t<span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span> <span class=\"keyword\">throws</span> InterruptedException, ExecutionException </span>{</div><div class=\"line\"></div><div class=\"line\">\t\t<span class=\"keyword\">long</span> start = System.currentTimeMillis();</div><div class=\"line\">\t\tFutureTask<String> futureA = <span class=\"keyword\">new</span> FutureTask<String>(<span class=\"keyword\">new</span> CallableDemo(<span class=\"string\">\"Thread-A\"</span>, <span class=\"number\">5000</span>));</div><div class=\"line\">\t\tThread tA = <span class=\"keyword\">new</span> Thread(futureA);</div><div class=\"line\">\t\ttA.start();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Thread is Done: \"</span> + futureA.isDone());</div><div class=\"line\">\t\tSystem.out.println(futureA.get());</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"Thread is Done: \"</span> + futureA.isDone());</div><div class=\"line\">\t\tFutureTask<String> futureB = <span class=\"keyword\">new</span> FutureTask<String>(<span class=\"keyword\">new</span> CallableDemo(<span class=\"string\">\"Thread-B\"</span>, <span class=\"number\">400</span>));</div><div class=\"line\">\t\tThread tB = <span class=\"keyword\">new</span> Thread(futureB);</div><div class=\"line\">\t\ttB.start();</div><div class=\"line\">\t\t<span class=\"keyword\">long</span> end = System.currentTimeMillis();</div><div class=\"line\">\t\tSystem.out.println(<span class=\"string\">\"During time: \"</span> + (end - start));</div><div class=\"line\"></div><div class=\"line\">\t}</div><div class=\"line\">}</div></pre></td></tr></table></figure>\n<p>这里也是实现了两个线程tA和tB,和上面Thread和Runnable的不同之处在于,这里使用futureA和futureB来获取两个线程的执行状态。futureA.isDone()。这两需要着重说的是futureA.get().这个方法的意思是:主线程等待tA执行完成。这个方法是会阻塞主线程的运行。下面是测试结果:<br><img src=\"/images/java_003.png\" alt=\"这里写图片描述\"><br>可以看到被标记的就是返回值,这是通过get()方法得到的,主线程会成tA执行完成之后,才会继续向下执行,而tB没有调用futureB.get(),所以tB没有阻塞主线程,和主线程是并发的。可以看到<strong>‘During time: 5003’</strong>在tB没有执行完成的时候已经被执行。</p>\n<h1 id=\"4-总结\"><a href=\"#4-总结\" class=\"headerlink\" title=\"4. 总结\"></a>4. 总结</h1><p>这篇主要介绍了自己实现多线程的三种方式:</p>\n<ol>\n<li>extends Thread,重写run()方法</li>\n<li>implements Runnable, 实现run()方法</li>\n<li>implements Callable<>,实现call()方法,可以获取线程的执行状态信息,isDone(),isCancelled()</li>\n</ol>\n<p>下一篇我们会介绍,线程并发时候的共享资源问题。</p>"},{"title":"Hexo用法","_content":"Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n<!-- more -->\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/deployment.html)\n","source":"_posts/hello-world.md","raw":"---\ntitle: Hexo用法\ntags: [Hexo, 博客]\ncategory: 博客搭建\n---\nWelcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n<!-- more -->\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/deployment.html)\n","slug":"hello-world","published":1,"date":"2017-05-24T15:54:24.557Z","updated":"2017-05-24T14:21:28.529Z","comments":1,"layout":"post","photos":[],"link":"","_id":"cj337799r00062kajoer22a98","content":"<p>Welcome to <a href=\"https://hexo.io/\" target=\"_blank\" rel=\"external\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\" target=\"_blank\" rel=\"external\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\" target=\"_blank\" rel=\"external\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\" target=\"_blank\" rel=\"external\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo new <span class=\"string\">\"My New Post\"</span></div></pre></td></tr></table></figure>\n<a id=\"more\"></a>\n<p>More info: <a href=\"https://hexo.io/docs/writing.html\" target=\"_blank\" rel=\"external\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo server</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/server.html\" target=\"_blank\" rel=\"external\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo generate</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\" target=\"_blank\" rel=\"external\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo deploy</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/deployment.html\" target=\"_blank\" rel=\"external\">Deployment</a></p>\n","site":{"data":{}},"excerpt":"<p>Welcome to <a href=\"https://hexo.io/\" target=\"_blank\" rel=\"external\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\" target=\"_blank\" rel=\"external\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\" target=\"_blank\" rel=\"external\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\" target=\"_blank\" rel=\"external\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo new <span class=\"string\">\"My New Post\"</span></div></pre></td></tr></table></figure>","more":"<p>More info: <a href=\"https://hexo.io/docs/writing.html\" target=\"_blank\" rel=\"external\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo server</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/server.html\" target=\"_blank\" rel=\"external\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo generate</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\" target=\"_blank\" rel=\"external\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><div class=\"line\">1</div></pre></td><td class=\"code\"><pre><div class=\"line\">$ hexo deploy</div></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/deployment.html\" target=\"_blank\" rel=\"external\">Deployment</a></p>"}],"PostAsset":[],"PostCategory":[{"post_id":"cj337798v00002kajwfqvn356","category_id":"cj337799r00042kaj57t49uod","_id":"cj337799r00092kajrjryqgr5"},{"post_id":"cj337799r00022kajvj0oczuj","category_id":"cj337799r00072kaj357hbjx1","_id":"cj33779a6000d2kajdft915it"},{"post_id":"cj337799r00062kajoer22a98","category_id":"cj337799r000a2kajn9q0mlsc","_id":"cj33779a6000g2kaja07s989f"}],"PostTag":[{"post_id":"cj337798v00002kajwfqvn356","tag_id":"cj337799r00052kajcbckyckf","_id":"cj337799r000c2kaj21nx1tf5"},{"post_id":"cj337798v00002kajwfqvn356","tag_id":"cj337799r00082kajsyn6quva","_id":"cj33779a6000e2kajl0e7hvm0"},{"post_id":"cj337799r00022kajvj0oczuj","tag_id":"cj337799r000b2kaj48p2udno","_id":"cj33779a6000i2kajhr86m7xk"},{"post_id":"cj337799r00022kajvj0oczuj","tag_id":"cj33779a6000f2kajbyiggijf","_id":"cj33779a6000j2kajya8kpa96"},{"post_id":"cj337799r00062kajoer22a98","tag_id":"cj33779a6000h2kajuz5bcp2v","_id":"cj33779a6000l2kajeszm8vzk"},{"post_id":"cj337799r00062kajoer22a98","tag_id":"cj33779a6000k2kajbqaie8ky","_id":"cj33779a6000m2kaj3vzmmkpb"}],"Tag":[{"name":"心情","_id":"cj337799r00052kajcbckyckf"},{"name":"感悟","_id":"cj337799r00082kajsyn6quva"},{"name":"Java","_id":"cj337799r000b2kaj48p2udno"},{"name":"线程池","_id":"cj33779a6000f2kajbyiggijf"},{"name":"Hexo","_id":"cj33779a6000h2kajuz5bcp2v"},{"name":"博客","_id":"cj33779a6000k2kajbqaie8ky"}]}}