{"id":520,"date":"2017-02-14T10:58:22","date_gmt":"2017-02-14T02:58:22","guid":{"rendered":"http:\/\/www.rainweb.site\/?p=520"},"modified":"2023-08-07T20:57:29","modified_gmt":"2023-08-07T12:57:29","slug":"java-article56","status":"publish","type":"post","link":"http:\/\/rain1024.com\/index.php\/2017\/02\/14\/java-article56\/","title":{"rendered":"Java\u9ad8\u7ea7\u5e94\u7528&#8212;\u7ebf\u7a0b\u7684\u4e09\u79cd\u521b\u5efa\u65b9\u5f0f"},"content":{"rendered":"<h2>\u7ebf\u7a0b\u548c\u8fdb\u7a0b\u5e94\u8be5\u90fd\u542c\u8bf4\u8fc7\uff0cThread\uff0cProcess\uff0c\u8fd9\u91cc\u5c31\u4e0d\u4ecb\u7ecd\u6982\u5ff5\u4e86\uff0c\u57fa\u672c\u7684Java\u7ebf\u7a0b\u6a21\u578b\u6709Thread\u7c7b\uff0cRunnable\u63a5\u53e3\uff0cCallable\u63a5\u53e3\u548cFuture\u63a5\u53e3\u7b49\uff0c\u8fd9\u4e9b\u7ebf\u7a0b\u6a21\u578b\u90fd\u662f\u9762\u5411\u5bf9\u8c61\u7684\u3002<\/h2>\n<h2>1. \u7ee7\u627fThread\u7c7b<\/h2>\n<h2>\u5176\u4e2dThread\u7c7b\u7684run(),\u65b9\u6cd5\u662f\u7ebf\u7a0b\u4e2d\u6700\u91cd\u8981\u7684\u65b9\u6cd5\uff0c\u7528\u4e8e\u6267\u884c\u7ebf\u7a0b\u8981\u5b8c\u6210\u7684\u4efb\u52a1\uff0c\u6211\u4eec\u6bcf\u6b21\u521b\u5efa\u4e00\u4e2a\u7ebf\u7a0b\u90fd\u8981\u91cd\u5199run\u65b9\u6cd5\uff0c\u5f53\u7136\u8fd8\u6709start()\u65b9\u6cd5\u8d1f\u8d23\u542f\u52a8\u3002<\/h2>\n<h3>\u4e0b\u9762\u7ee7\u627fThread\u7c7b<\/h3>\n<pre><code class=\"java\">package com.rain.demo;\npublic class ThreadDemo extends Thread {\/\/\u7ee7\u627fThread\u7c7b\n    public void run(){ \/\/\u91cd\u5199run\u65b9\u6cd5\n        setName(\"\u5b50\u7ebf\u7a0b\");  \/\/\u5b9a\u4e49\u5b50\u7ebf\u7a0b\u7684name\n        for (int i=0;i&lt;5;i++){\n            System.out.println(this.getName()+\":\"+i);\/\/\u6253\u5370\u5b50\u7ebf\u7a0b\u7684name\u548ci\u503c\n        }\n    }\n    public static void main(String[] arge){\n        ThreadDemo td = new ThreadDemo(); \/\/\u521b\u5efa\u7ebf\u7a0b\u5bf9\u8c61\n        td.start();                 \/\/\u542f\u52a8\u7ebf\u7a0b\n        for(int i=10;i&lt;15;i++){\n            System.out.println(Thread.currentThread().getName()+\":\"+i);\/\/\u6253\u5370\u4e3b\u7ebf\u7a0b\u7684name\u548ci\u503c\n        }\n    }\n}\n<\/code><\/pre>\n<h3>\u6267\u884c\u7ed3\u679c\uff1a<\/h3>\n<pre><code>main:10\nmain:11\nmain:12\n\u5b50\u7ebf\u7a0b:0\nmain:13\n\u5b50\u7ebf\u7a0b:1\nmain:14\n\u5b50\u7ebf\u7a0b:2\n\u5b50\u7ebf\u7a0b:3\n\u5b50\u7ebf\u7a0b:4\n<\/code><\/pre>\n<h2>2. \u5b9e\u73b0Runable\u63a5\u53e3<\/h2>\n<h2>Runnable\u63a5\u53e3\u7528\u4e8e\u6807\u8bc6\u67d0\u4e2aJava\u7c7b\u53ef\u5426\u4f5c\u4e3a\u7ebf\u7a0b\u7c7b\uff0c\u8be5\u63a5\u53e3\u53ea\u6709\u4e00\u4e2a\u62bd\u8c61\u65b9\u6cd5run\uff0c\u7528\u4e8e\u6267\u884c\u7ebf\u7a0b\u4e2d\u7684\u4efb\u52a1\u3002\u4e00\u4e2a\u5c05\u5b9e\u73b0Runnable\u63a5\u53e3\u540e\uff0c\u5e76\u4e0d\u4ee3\u8868\u8be5\u7c7b\u662f\u4e2a\u201c\u7ebf\u7a0b\u201d\u7c7b\uff0c\u4e0d\u80fd\u76f4\u63a5\u542f\u52a8\u7ebf\u7a0b\uff0c\u5fc5\u987b\u901a\u8fc7Thread\u7c7b\u7684\u5b9e\u4f8b\u6765\u521b\u5efa\u5e76\u542f\u52a8\u7ebf\u7a0b\u3002<\/h2>\n<h2>\u901a\u8fc7Runnable\u63a5\u53e3\u521b\u5efa\u5e76\u542f\u52a8\u7ebf\u7a0b\u7684\u6b65\u9aa4\uff1a<\/h2>\n<blockquote>\n<ul>\n<li>(1)\u3001\u5b9a\u4e49\u4e00\u4e2a\u96f7\u5b9e\u73b0Runnable\u63a5\u53e3\uff0c\u5e76\u5b9e\u73b0\u8be5\u63a5\u53e3\u4e2d\u7684run\u65b9\u6cd5\uff1b<\/li>\n<li>(2)\u3001\u521b\u5efa\u4e00\u4e2aThread\u7c7b\u7684\u5b9e\u4f8b\uff0c\u5e76\u5c06Runnable\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\u6240\u521b\u5efa\u7684\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\u4f20\u5165Thread\u7c7b\u7684\u6784\u9020\u65b9\u6cd5\u4e2d\uff1b<\/li>\n<li>(3)\u3001\u8c03\u7528Thread\u5bf9\u8c61\u7684start\u65b9\u6cd5\u542f\u52a8\u8be5\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<\/blockquote>\n<h3>\u4ee3\u7801\u5b9e\u73b0\uff1a<\/h3>\n<pre><code>   package com.rain.demo;\n   \/\/\u5b9e\u73b0Runnable\u63a5\u53e3\n   class ThreadTask implements Runnable {\n    @Override\n    public void run() {\/\/\u91cd\u5199run\u65b9\u6cd5\n        \/\/ TODO Auto-generated method stub\n        for(int i=0;i&lt;5;i++){\n            \/\/\u6253\u5370\u5f53\u524d\u7ebf\u7a0b\u7684name\u548ci\u503c\n            System.out.println(Thread.currentThread().getName()+\":\"+i);\n        }\n    }\n   }\n    \/\/\u5b9e\u73b0\u7c7b\n    public class RunnableDemo{\n        public static void main(String[] args) {\n            \/\/\u5b9e\u4f8b\u5316Thread\u7c7b\uff0c\u53c2\u6570\u4e3aThreadTask\u5bf9\u8c61\n            Thread td = new Thread(new ThreadTask());\n            td.start();\/\/\u542f\u52a8\u7ebf\u7a0b\n            for(int i=10;i&lt;=15;i++){\n                \/\/\u6253\u5370\u4e3b\u7ebf\u7a0bname\u548ci\u503c\n                System.out.println(Thread.currentThread().getName()+\":\"+i);\n            }\n        }\n\n    }\n<\/code><\/pre>\n<h3>\u7ed3\u679c<\/h3>\n<pre><code>   main:10\n   Thread-0:0\n   main:11\n   Thread-0:1\n   main:12\n   Thread-0:2\n   Thread-0:3\n   Thread-0:4\n   main:13\n   main:14\n   main:15\n<\/code><\/pre>\n<h2>3. \u4f7f\u7528Callable\u548cFuture\u63a5\u53e3<\/h2>\n<h2>Callable\u63a5\u53e3\u63d0\u4f9b\u4e00\u4e2acall\u65b9\u6cd5\u4f5c\u4e3a\u7ebf\u7a0b\u7684\u6267\u884c\u4f53\uff0ccall\u65b9\u6cd5\u6bd4run\u65b9\u6cd5\u529f\u80fd\u66f4\u5f3a\u5927\uff0ccall\u65b9\u6cd5\u53ef\u4ee5\u6709\u8fd4\u56de\u503c\uff0c\u4e5f\u53ef\u4ee5\u58f0\u660e\u629b\u51fa\u5f02\u5e38\uff0cFuture\u63a5\u53e3\u7528\u6765\u63a5\u6536Callable\u63a5\u53e3\u4e2dcall\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\uff0cFuture\u63a5\u53e3\u63d0\u4f9b\u4e00\u4e2aFutureTask\u5b9e\u73b0\u7c7b\uff0c\u8be5\u7c7b\u540c\u65f6\u5b9e\u73b0\u4e86Future\u548cRunnable\u4e24\u4e2a\u63a5\u53e3\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f5c\u4e3aThread\u7c7b\u7684target\u53c2\u6570\uff0c\u4f7f\u7528Callable\u548cFuture\u63a5\u53e3\u7684\u6700\u5927\u4f18\u52bf\u5728\u4e8e\u53ef\u4ee5\u5728\u7ebf\u7a0b\u6267\u884c\u5b8c\u4efb\u52a1\u4e4b\u540e\u83b7\u53d6\u6267\u884c\u7ed3\u679c\u3002<\/h2>\n<h2>\u4f7f\u7528Callable\u548cFuture\u63a5\u53e3\u521b\u5efa\u5e76\u542f\u52a8\u7ebf\u7a0b\u7684\u6b65\u9aa4\uff1a<\/h2>\n<blockquote>\n<ul>\n<li>(1)\u3001\u521b\u5efaCallable\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\uff0c\u5e76\u5b9e\u73b0call\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u5c06\u4f5c\u4e3a\u7ebf\u7a0b\u7684\u6267\u884c\u4f53\uff0c\u5e76\u5177\u6709\u8fd4\u56de\u503c\uff0c\u7136\u540e\u521b\u5efaCallable\u5b9e\u73b0\u7c7b\u7684\u5b9e\u4f8b\u3002<\/li>\n<li>(2)\u5b9e\u73b0FutureTask\u7c7b\u6765\u5305\u88c5Callable\u5bf9\u8c61\uff0c\u5728FutureTask\u5bf9\u8c61\u4e2d\u5c01\u88c5\u4e86Callable\u5bf9\u8c61\u7684call\u65b9\u6cd5\u7684\u8fd4\u56de\u503c<\/li>\n<li>(3)\u4f7f\u7528FutureTask\u5bf9\u8c61\u4f5c\u4e3aThread\u5bf9\u8c61\u7684target\u521b\u5efa\u5e76\u542f\u52a8\u65b0\u7ebf\u7a0b<\/li>\n<li>(4)\u8c03\u7528FutureTaks\u5bf9\u8c61\u7684get\u65b9\u6cd5\u6765\u83b7\u5f97\u5b50\u7ebf\u7a0b\u6267\u884c\u7ed3\u675f\u540e\u7684\u8fd4\u56de\u503c<\/li>\n<\/ul>\n<\/blockquote>\n<h3>\u5b9e\u4f8b\u4ee3\u7801<\/h3>\n<pre><code>package com.rain.demo;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.FutureTask;\n\/\/\u521b\u5efaCallable\u63a5\u53e3\u5b9e\u73b0\u7c7b\nclass Task implements Callable&lt;Integer&gt;{\n        @Override\n        \/\/\u5b9e\u73b0call\u65b9\u6cd5\n        public Integer call() throws Exception {\n            \/\/ TODO Auto-generated method stub\n            int i = 0;\n            for(i=0;i&lt;5;i++){\n                System.out.println(Thread.currentThread().getName()+\":\"+i);\n            }\n            \/\/\u8fd4\u56decall\u7684\u8fd4\u56de\u503c\n            return i;\n        }\n    }\n\/\/\u4e3b\u7c7b\npublic class CallableFutureDemo{\n    public static void main(String[] args) {\n        \/\/\u4f7f\u7528Future\u7c7b\u5305\u88c5Callable\u5b9e\u73b0\u7c7b\u7684\u5b9e\u4f8b\n        FutureTask&lt;Integer&gt; task = new FutureTask&lt;Integer&gt;(new Task());\n        \/\/\u521b\u5efa\u7ebf\u7a0b\uff0c\u4f7f\u7528futureTask\u5bf9\u8c61\u7684task\u4f5c\u4e3aThread\u5bf9\u8c61\u7684targer\uff0c\u542f\u52a8\u7ebf\u7a0b\n        new Thread(task,\"\u5b50\u7ebf\u7a0b\").start();\n        try {\n            System.out.println(\"\u5b50\u7ebf\u7a0b\u8fd4\u56de\u503c\uff1a\"+task.get());\n        }catch(InterruptedException e){\n            e.printStackTrace();\n        } catch (ExecutionException e) {\n            \/\/ TODO: handle exception\n            e.printStackTrace();\n        }\n        for(int i=10;i&lt;15;i++){\n            System.out.println(Thread.currentThread().getName()+\":\"+i);\n        }\n    }\n}\n<\/code><\/pre>\n<h3>\u7ed3\u679c<\/h3>\n<pre><code>\u5b50\u7ebf\u7a0b:0\n\u5b50\u7ebf\u7a0b:1\n\u5b50\u7ebf\u7a0b:2\n\u5b50\u7ebf\u7a0b:3\n\u5b50\u7ebf\u7a0b:4\n\u5b50\u7ebf\u7a0b\u8fd4\u56de\u503c\uff1a5\nmain:10\nmain:11\nmain:12\nmain:13\nmain:14\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7ebf\u7a0b\u548c\u8fdb\u7a0b\u5e94\u8be5\u90fd\u542c\u8bf4\u8fc7\uff0cThread\uff0cProcess\uff0c\u8fd9\u91cc\u5c31\u4e0d\u4ecb\u7ecd\u6982\u5ff5\u4e86\uff0c\u57fa\u672c\u7684Java\u7ebf\u7a0b\u6a21\u578b\u6709Thread\u2026 <span class=\"read-more\"><a href=\"http:\/\/rain1024.com\/index.php\/2017\/02\/14\/java-article56\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":472,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"aside","meta":{"footnotes":""},"categories":[31],"tags":[46,84],"class_list":["post-520","post","type-post","status-publish","format-aside","has-post-thumbnail","hentry","category-java","tag-java","tag-thread","post_format-post-format-aside"],"_links":{"self":[{"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/posts\/520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/comments?post=520"}],"version-history":[{"count":1,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/posts\/520\/revisions"}],"predecessor-version":[{"id":1484,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/posts\/520\/revisions\/1484"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/media\/472"}],"wp:attachment":[{"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/media?parent=520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/categories?post=520"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/rain1024.com\/index.php\/wp-json\/wp\/v2\/tags?post=520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}