如何终止java线程

java\u7ebf\u7a0b\u5982\u4f55\u505c\u6b62

\u7ec8\u6b62\u7ebf\u7a0b\u7684\u4e09\u79cd\u65b9\u6cd5\uff1a1. \u4f7f\u7528\u9000\u51fa\u6807\u5fd7\uff0c\u4f7f\u7ebf\u7a0b\u6b63\u5e38\u9000\u51fa\uff0c\u4e5f\u5c31\u662f\u5f53run\u65b9\u6cd5\u5b8c\u6210\u540e\u7ebf\u7a0b\u7ec8\u6b62\u3002 2. \u4f7f\u7528stop\u65b9\u6cd5\u5f3a\u884c\u7ec8\u6b62\u7ebf\u7a0b\uff08\u8fd9\u4e2a\u65b9\u6cd5\u4e0d\u63a8\u8350\u4f7f\u7528\uff0c\u56e0\u4e3astop\u548csuspend\u3001resume\u4e00\u6837\uff0c\u4e5f\u53ef\u80fd\u53d1\u751f\u4e0d\u53ef\u9884\u6599\u7684\u7ed3\u679c\uff09\u30023. \u4f7f\u7528interrupt\u65b9\u6cd5\u4e2d\u65ad\u7ebf\u7a0b\u3002 1. \u4f7f\u7528\u9000\u51fa\u6807\u5fd7\u7ec8\u6b62\u7ebf\u7a0b \u5f53run\u65b9\u6cd5\u6267\u884c\u5b8c\u540e\uff0c\u7ebf\u7a0b\u5c31\u4f1a\u9000\u51fa\u3002\u4f46\u6709\u65f6run\u65b9\u6cd5\u662f\u6c38\u8fdc\u4e0d\u4f1a\u7ed3\u675f\u7684\u3002\u5982\u5728\u670d\u52a1\u7aef\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7ebf\u7a0b\u8fdb\u884c\u76d1\u542c\u5ba2\u6237\u7aef\u8bf7\u6c42\uff0c\u6216\u662f\u5176\u4ed6\u7684\u9700\u8981\u5faa\u73af\u5904\u7406\u7684\u4efb\u52a1\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u662f\u5c06\u8fd9\u4e9b\u4efb\u52a1\u653e\u5728\u4e00\u4e2a\u5faa\u73af\u4e2d\uff0c\u5982while\u5faa\u73af\u3002\u5982\u679c\u60f3\u8ba9\u5faa\u73af\u6c38\u8fdc\u8fd0\u884c\u4e0b\u53bb\uff0c\u53ef\u4ee5\u4f7f\u7528while\uff08true\uff09{\u2026\u2026}\u6765\u5904\u7406\u3002\u4f46\u8981\u60f3\u4f7fwhile\u5faa\u73af\u5728\u67d0\u4e00\u7279\u5b9a\u6761\u4ef6\u4e0b\u9000\u51fa\uff0c\u6700\u76f4\u63a5\u7684\u65b9\u6cd5\u5c31\u662f\u8bbe\u4e00\u4e2aboolean\u7c7b\u578b\u7684\u6807\u5fd7\uff0c\u5e76\u901a\u8fc7\u8bbe\u7f6e\u8fd9\u4e2a\u6807\u5fd7\u4e3atrue\u6216false\u6765\u63a7\u5236while\u5faa\u73af\u662f\u5426\u9000\u51fa\u3002\u4e0b\u9762\u7ed9\u51fa\u4e86\u4e00\u4e2a\u5229\u7528\u9000\u51fa\u6807\u5fd7\u7ec8\u6b62\u7ebf\u7a0b\u7684\u4f8b\u5b50\u3002
package chapter2; public class ThreadFlag extends Thread { public volatile boolean exit = false; public void run() { while (!exit); } public static void main(String[] args) throws Exception { ThreadFlag thread = new ThreadFlag(); thread.start(); sleep(5000); // \u4e3b\u7ebf\u7a0b\u5ef6\u8fdf5\u79d2 thread.exit = true; // \u7ec8\u6b62\u7ebf\u7a0bthread thread.join(); System.out.println("\u7ebf\u7a0b\u9000\u51fa!"); } }\u5728\u4e0a\u9762\u4ee3\u7801\u4e2d\u5b9a\u4e49\u4e86\u4e00\u4e2a\u9000\u51fa\u6807\u5fd7exit\uff0c\u5f53exit\u4e3atrue\u65f6\uff0cwhile\u5faa\u73af\u9000\u51fa\uff0cexit\u7684\u9ed8\u8ba4\u503c\u4e3afalse.\u5728\u5b9a\u4e49exit\u65f6\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2aJava\u5173\u952e\u5b57volatile\uff0c\u8fd9\u4e2a\u5173\u952e\u5b57\u7684\u76ee\u7684\u662f\u4f7fexit\u540c\u6b65\uff0c\u4e5f\u5c31\u662f\u8bf4\u5728\u540c\u4e00\u65f6\u523b\u53ea\u80fd\u7531\u4e00\u4e2a\u7ebf\u7a0b\u6765\u4fee\u6539exit\u7684\u503c\uff0c 2. \u4f7f\u7528stop\u65b9\u6cd5\u7ec8\u6b62\u7ebf\u7a0b \u4f7f\u7528stop\u65b9\u6cd5\u53ef\u4ee5\u5f3a\u884c\u7ec8\u6b62\u6b63\u5728\u8fd0\u884c\u6216\u6302\u8d77\u7684\u7ebf\u7a0b\u3002\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5982\u4e0b\u7684\u4ee3\u7801\u6765\u7ec8\u6b62\u7ebf\u7a0b\uff1a thread.stop(); \u867d\u7136\u4f7f\u7528\u4e0a\u9762\u7684\u4ee3\u7801\u53ef\u4ee5\u7ec8\u6b62\u7ebf\u7a0b\uff0c\u4f46\u4f7f\u7528stop\u65b9\u6cd5\u662f\u5f88\u5371\u9669\u7684\uff0c\u5c31\u8c61\u7a81\u7136\u5173\u95ed\u8ba1\u7b97\u673a\u7535\u6e90\uff0c\u800c\u4e0d\u662f\u6309\u6b63\u5e38\u7a0b\u5e8f\u5173\u673a\u4e00\u6837\uff0c\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e0d\u53ef\u9884\u6599\u7684\u7ed3\u679c\uff0c\u56e0\u6b64\uff0c\u5e76\u4e0d\u63a8\u8350\u4f7f\u7528stop\u65b9\u6cd5\u6765\u7ec8\u6b62\u7ebf\u7a0b\u3002 3. \u4f7f\u7528interrupt\u65b9\u6cd5\u7ec8\u6b62\u7ebf\u7a0b \u4f7f\u7528interrupt\u65b9\u6cd5\u6765\u7ec8\u7aef\u7ebf\u7a0b\u53ef\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a \uff081\uff09\u7ebf\u7a0b\u5904\u4e8e\u963b\u585e\u72b6\u6001\uff0c\u5982\u4f7f\u7528\u4e86sleep\u65b9\u6cd5\u3002 \uff082\uff09\u4f7f\u7528while\uff08\uff01isInterrupted\uff08\uff09\uff09{\u2026\u2026}\u6765\u5224\u65ad\u7ebf\u7a0b\u662f\u5426\u88ab\u4e2d\u65ad\u3002 \u5728\u7b2c\u4e00\u79cd\u60c5\u51b5\u4e0b\u4f7f\u7528interrupt\u65b9\u6cd5\uff0csleep\u65b9\u6cd5\u5c06\u629b\u51fa\u4e00\u4e2aInterruptedException\u4f8b\u5916\uff0c\u800c\u5728\u7b2c\u4e8c\u79cd\u60c5\u51b5\u4e0b\u7ebf\u7a0b\u5c06\u76f4\u63a5\u9000\u51fa\u3002\u4e0b\u9762\u7684\u4ee3\u7801\u6f14\u793a\u4e86\u5728\u7b2c\u4e00\u79cd\u60c5\u51b5\u4e0b\u4f7f\u7528interrupt\u65b9\u6cd5\u3002
package chapter2; public class ThreadInterrupt extends Thread { public void run() { try { sleep(50000); // \u5ef6\u8fdf50\u79d2 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { Thread thread = new ThreadInterrupt(); thread.start(); System.out.println("\u572850\u79d2\u4e4b\u5185\u6309\u4efb\u610f\u952e\u4e2d\u65ad\u7ebf\u7a0b!"); System.in.read(); thread.interrupt(); thread.join(); System.out.println("\u7ebf\u7a0b\u5df2\u7ecf\u9000\u51fa!"); } }\u4e0a\u9762\u4ee3\u7801\u7684\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a \u572850\u79d2\u4e4b\u5185\u6309\u4efb\u610f\u952e\u4e2d\u65ad\u7ebf\u7a0b! sleep interrupted \u7ebf\u7a0b\u5df2\u7ecf\u9000\u51fa! \u5728\u8c03\u7528interrupt\u65b9\u6cd5\u540e\uff0c sleep\u65b9\u6cd5\u629b\u51fa\u5f02\u5e38\uff0c\u7136\u540e\u8f93\u51fa\u9519\u8bef\u4fe1\u606f\uff1asleep interrupted. \u6ce8\u610f\uff1a\u5728Thread\u7c7b\u4e2d\u6709\u4e24\u4e2a\u65b9\u6cd5\u53ef\u4ee5\u5224\u65ad\u7ebf\u7a0b\u662f\u5426\u901a\u8fc7interrupt\u65b9\u6cd5\u88ab\u7ec8\u6b62\u3002\u4e00\u4e2a\u662f\u9759\u6001\u7684\u65b9\u6cd5interrupted\uff08\uff09\uff0c\u4e00\u4e2a\u662f\u975e\u9759\u6001\u7684\u65b9\u6cd5isInterrupted\uff08\uff09\uff0c\u8fd9\u4e24\u4e2a\u65b9\u6cd5\u7684\u533a\u522b\u662finterrupted\u7528\u6765\u5224\u65ad\u5f53\u524d\u7ebf\u662f\u5426\u88ab\u4e2d\u65ad\uff0c\u800cisInterrupted\u53ef\u4ee5\u7528\u6765\u5224\u65ad\u5176\u4ed6\u7ebf\u7a0b\u662f\u5426\u88ab\u4e2d\u65ad\u3002\u56e0\u6b64\uff0cwhile \uff08\uff01isInterrupted\uff08\uff09\uff09\u4e5f\u53ef\u4ee5\u6362\u6210while \uff08\uff01Thread.interrupted\uff08\uff09\uff09\u3002

\u7ec8\u6b62\u7ebf\u7a0b\u7684\u4e09\u79cd\u65b9\u6cd5
1. \u4f7f\u7528\u9000\u51fa\u6807\u5fd7\uff0c\u4f7f\u7ebf\u7a0b\u6b63\u5e38\u9000\u51fa\uff0c\u4e5f\u5c31\u662f\u5f53run\u65b9\u6cd5\u5b8c\u6210\u540e\u7ebf\u7a0b\u7ec8\u6b62\u3002
2. \u4f7f\u7528stop\u65b9\u6cd5\u5f3a\u884c\u7ec8\u6b62\u7ebf\u7a0b\uff08\u8fd9\u4e2a\u65b9\u6cd5\u4e0d\u63a8\u8350\u4f7f\u7528\uff0c\u56e0\u4e3astop\u548csuspend\u3001resume\u4e00\u6837\uff0c\u4e5f\u53ef\u80fd\u53d1\u751f\u4e0d\u53ef\u9884\u6599\u7684\u7ed3\u679c\uff09\u3002
3. \u4f7f\u7528interrupt\u65b9\u6cd5\u4e2d\u65ad\u7ebf\u7a0b\u3002

1. \u4f7f\u7528\u9000\u51fa\u6807\u5fd7\u7ec8\u6b62\u7ebf\u7a0b
\u5f53run\u65b9\u6cd5\u6267\u884c\u5b8c\u540e\uff0c\u7ebf\u7a0b\u5c31\u4f1a\u9000\u51fa\u3002\u4f46\u6709\u65f6run\u65b9\u6cd5\u662f\u6c38\u8fdc\u4e0d\u4f1a\u7ed3\u675f\u7684\u3002\u5982\u5728\u670d\u52a1\u7aef\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7ebf\u7a0b\u8fdb\u884c\u76d1\u542c\u5ba2\u6237\u7aef\u8bf7\u6c42\uff0c\u6216\u662f\u5176\u4ed6\u7684\u9700\u8981\u5faa\u73af\u5904\u7406\u7684\u4efb\u52a1\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u662f\u5c06\u8fd9\u4e9b\u4efb\u52a1\u653e\u5728\u4e00\u4e2a\u5faa\u73af\u4e2d\uff0c\u5982while\u5faa\u73af\u3002\u5982\u679c\u60f3\u8ba9\u5faa\u73af\u6c38\u8fdc\u8fd0\u884c\u4e0b\u53bb\uff0c\u53ef\u4ee5\u4f7f\u7528while\uff08true\uff09{\u2026\u2026}\u6765\u5904\u7406\u3002\u4f46\u8981\u60f3\u4f7fwhile\u5faa\u73af\u5728\u67d0\u4e00\u7279\u5b9a\u6761\u4ef6\u4e0b\u9000\u51fa\uff0c\u6700\u76f4\u63a5\u7684\u65b9\u6cd5\u5c31\u662f\u8bbe\u4e00\u4e2aboolean\u7c7b\u578b\u7684\u6807\u5fd7\uff0c\u5e76\u901a\u8fc7\u8bbe\u7f6e\u8fd9\u4e2a\u6807\u5fd7\u4e3atrue\u6216false\u6765\u63a7\u5236while\u5faa\u73af\u662f\u5426\u9000\u51fa\u3002\u4e0b\u9762\u7ed9\u51fa\u4e86\u4e00\u4e2a\u5229\u7528\u9000\u51fa\u6807\u5fd7\u7ec8\u6b62\u7ebf\u7a0b\u7684\u4f8b\u5b50\u3002
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // \u4e3b\u7ebf\u7a0b\u5ef6\u8fdf5\u79d2
thread.exit = true; // \u7ec8\u6b62\u7ebf\u7a0bthread
thread.join();
System.out.println("\u7ebf\u7a0b\u9000\u51fa!");
}
}
\u5728\u4e0a\u9762\u4ee3\u7801\u4e2d\u5b9a\u4e49\u4e86\u4e00\u4e2a\u9000\u51fa\u6807\u5fd7exit\uff0c\u5f53exit\u4e3atrue\u65f6\uff0cwhile\u5faa\u73af\u9000\u51fa\uff0cexit\u7684\u9ed8\u8ba4\u503c\u4e3afalse.\u5728\u5b9a\u4e49exit\u65f6\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2aJava\u5173\u952e\u5b57volatile\uff0c\u8fd9\u4e2a\u5173\u952e\u5b57\u7684\u76ee\u7684\u662f\u4f7fexit\u540c\u6b65\uff0c\u4e5f\u5c31\u662f\u8bf4\u5728\u540c\u4e00\u65f6\u523b\u53ea\u80fd\u7531\u4e00\u4e2a\u7ebf\u7a0b\u6765\u4fee\u6539exit\u7684\u503c\uff0c

2. \u4f7f\u7528stop\u65b9\u6cd5\u7ec8\u6b62\u7ebf\u7a0b
\u4f7f\u7528stop\u65b9\u6cd5\u53ef\u4ee5\u5f3a\u884c\u7ec8\u6b62\u6b63\u5728\u8fd0\u884c\u6216\u6302\u8d77\u7684\u7ebf\u7a0b\u3002\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5982\u4e0b\u7684\u4ee3\u7801\u6765\u7ec8\u6b62\u7ebf\u7a0b\uff1a
thread.stop();
\u867d\u7136\u4f7f\u7528\u4e0a\u9762\u7684\u4ee3\u7801\u53ef\u4ee5\u7ec8\u6b62\u7ebf\u7a0b\uff0c\u4f46\u4f7f\u7528stop\u65b9\u6cd5\u662f\u5f88\u5371\u9669\u7684\uff0c\u5c31\u8c61\u7a81\u7136\u5173\u95ed\u8ba1\u7b97\u673a\u7535\u6e90\uff0c\u800c\u4e0d\u662f\u6309\u6b63\u5e38\u7a0b\u5e8f\u5173\u673a\u4e00\u6837\uff0c\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e0d\u53ef\u9884\u6599\u7684\u7ed3\u679c\uff0c\u56e0\u6b64\uff0c\u5e76\u4e0d\u63a8\u8350\u4f7f\u7528stop\u65b9\u6cd5\u6765\u7ec8\u6b62\u7ebf\u7a0b\u3002

3. \u4f7f\u7528interrupt\u65b9\u6cd5\u7ec8\u6b62\u7ebf\u7a0b
\u4f7f\u7528interrupt\u65b9\u6cd5\u6765\u7ec8\u7aef\u7ebf\u7a0b\u53ef\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a
\uff081\uff09\u7ebf\u7a0b\u5904\u4e8e\u963b\u585e\u72b6\u6001\uff0c\u5982\u4f7f\u7528\u4e86sleep\u65b9\u6cd5\u3002
\uff082\uff09\u4f7f\u7528while\uff08\uff01isInterrupted\uff08\uff09\uff09{\u2026\u2026}\u6765\u5224\u65ad\u7ebf\u7a0b\u662f\u5426\u88ab\u4e2d\u65ad\u3002
\u5728\u7b2c\u4e00\u79cd\u60c5\u51b5\u4e0b\u4f7f\u7528interrupt\u65b9\u6cd5\uff0csleep\u65b9\u6cd5\u5c06\u629b\u51fa\u4e00\u4e2aInterruptedException\u4f8b\u5916\uff0c\u800c\u5728\u7b2c\u4e8c\u79cd\u60c5\u51b5\u4e0b\u7ebf\u7a0b\u5c06\u76f4\u63a5\u9000\u51fa\u3002\u4e0b\u9762\u7684\u4ee3\u7801\u6f14\u793a\u4e86\u5728\u7b2c\u4e00\u79cd\u60c5\u51b5\u4e0b\u4f7f\u7528interrupt\u65b9\u6cd5\u3002
package chapter2;
public class ThreadInterrupt extends Thread
{
public void run()
{
try
{
sleep(50000); // \u5ef6\u8fdf50\u79d2
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception
{
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("\u572850\u79d2\u4e4b\u5185\u6309\u4efb\u610f\u952e\u4e2d\u65ad\u7ebf\u7a0b!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("\u7ebf\u7a0b\u5df2\u7ecf\u9000\u51fa!");
}
}
\u4e0a\u9762\u4ee3\u7801\u7684\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a
\u572850\u79d2\u4e4b\u5185\u6309\u4efb\u610f\u952e\u4e2d\u65ad\u7ebf\u7a0b!
sleep interrupted
\u7ebf\u7a0b\u5df2\u7ecf\u9000\u51fa!
\u5728\u8c03\u7528interrupt\u65b9\u6cd5\u540e\uff0c sleep\u65b9\u6cd5\u629b\u51fa\u5f02\u5e38\uff0c\u7136\u540e\u8f93\u51fa\u9519\u8bef\u4fe1\u606f\uff1asleep interrupted.
\u6ce8\u610f\uff1a\u5728Thread\u7c7b\u4e2d\u6709\u4e24\u4e2a\u65b9\u6cd5\u53ef\u4ee5\u5224\u65ad\u7ebf\u7a0b\u662f\u5426\u901a\u8fc7interrupt\u65b9\u6cd5\u88ab\u7ec8\u6b62\u3002\u4e00\u4e2a\u662f\u9759\u6001\u7684\u65b9\u6cd5interrupted\uff08\uff09\uff0c\u4e00\u4e2a\u662f\u975e\u9759\u6001\u7684\u65b9\u6cd5isInterrupted\uff08\uff09\uff0c\u8fd9\u4e24\u4e2a\u65b9\u6cd5\u7684\u533a\u522b\u662finterrupted\u7528\u6765\u5224\u65ad\u5f53\u524d\u7ebf\u662f\u5426\u88ab\u4e2d\u65ad\uff0c\u800cisInterrupted\u53ef\u4ee5\u7528\u6765\u5224\u65ad\u5176\u4ed6\u7ebf\u7a0b\u662f\u5426\u88ab\u4e2d\u65ad\u3002\u56e0\u6b64\uff0cwhile \uff08\uff01isInterrupted\uff08\uff09\uff09\u4e5f\u53ef\u4ee5\u6362\u6210while \uff08\uff01Thread.interrupted\uff08\uff09\uff09\u3002

调用线程的stop方法,即可结束一条线程,但是API上说这个方法已经过时

以下为中文API的原话:

该方法具有固有的不安全性。

用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 

ThreadDeath 

异常的一个自然后果)。

如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。

stop 的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。

目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。

如果目标线程等待很长时间(例如基于一个条件变量),则应使用 

interrupt 方法来中断该等待。

有关更多信息,请参阅为何不赞成使用 

Thread.stop、Thread.suspend 和 Thread.resume?。



API上说,如果你的线程持有某个对象锁,而你却调用了stop,则这个对象锁永远不被释放,可能造成死锁,所以你应该先调用 interrupt() 停止线程,再调用isInterrupted()测试是否终止,

注意,只有你的线程在wait中才有效果的



  • Java濡備綍涓柇涓涓鍦ㄨ繍琛岀殑绾跨▼
    绛旓細棣栧厛 蹇樻帀Thread stop鏂规硶 铏界劧瀹冪‘瀹鍋滄浜嗕竴涓鍦ㄨ繍琛岀殑绾跨▼ 鐒惰 杩欑鏂规硶鏄笉瀹夊叏涔熸槸涓嶅彈鎻愬$殑 杩欐剰鍛崇潃 鍦ㄦ湭鏉ョ殑JAVA鐗堟湰涓 瀹冨皢涓嶅瀛樺湪 涓浜涜交鐜囩殑瀹朵紮鍙兘琚彟涓绉嶆柟娉昑hread interrupt鎵杩锋儜 灏界 鍏跺悕绉颁技涔庡湪鏆楃ず钁椾粈涔 鐒惰 杩欑鏂规硶骞朵笉浼氫腑鏂竴涓鍦ㄨ繍琛岀殑绾跨▼(寰呬細灏嗚繘涓姝ヨ鏄) 姝eListing A...
  • java 涓や釜绾跨▼ 鎬庝箞鍋滄鍏朵腑涓涓
    绛旓細鏈2绉嶆柟娉曞彲浠ヤ娇缁堟绾跨▼銆1. 浣跨敤閫鍑烘爣蹇楋紝浣跨嚎绋嬫甯搁鍑猴紝涔熷氨鏄綋run鏂规硶瀹屾垚鍚绾跨▼缁堟 2. 浣跨敤interrupt鏂规硶涓柇绾跨▼
  • java 绾跨▼ 鎴戞兂璁╂病鎵ц瀹岀殑run鏂规硶 鎻愬墠缁堟銆傛湁浠涔堟柟娉
    绛旓細java绾跨▼璁╂病鎵ц瀹岀殑run鏂规硶鎻愬墠缁堟鐨勬柟娉曞涓嬶細 1. 浣跨敤閫鍑烘爣蹇楋紝浣跨嚎绋嬫甯搁鍑猴紝涔熷氨鏄綋run鏂规硶瀹屾垚鍚绾跨▼缁堟銆俻ackage chapter2; public class ThreadFlag extends Thread { public volatile boolean exit = false; public void run() { while (!exit); } public stat...
  • 鎬庢牱鍦java涓鍏抽棴澶绾跨▼鍏朵腑涓涓嚎绋?璁╁叾浠栫嚎绋嬭繕姝e父杩愯?
    绛旓細鍏朵粬鍥炵瓟 璋冪敤浜涙柟娉晊ield()鏆傚仠褰撳墠姝e湪鎵ц鐨绾跨▼瀵硅薄,骞舵墽琛屽叾浠栫嚎绋 Java_HTML_Dong | 鍙戝竷浜2012-09-26 涓炬姤| 璇勮 1 0 璁剧疆涓涓竷灏斿瀷鍙橀噺flg while(flg) lcy2000127 | 鍙戝竷浜2012-09-22 涓炬姤| 璇勮 1 0 涓烘偍鎺ㄨ崘: 濡備綍鍏抽棴澶氱嚎绋 濡備綍浣跨敤澶氱嚎绋 tomcat澶氱嚎绋 娴呰皥绾跨▼ 澶氱嚎绋嬪悓姝...
  • 杞欢寮鍙绾跨▼鐨勫鐞嗘柟寮?
    绛旓細澶у鍦ㄥ涔java缂栫▼璇█鐨勮繃绋嬩腑锛屽浜庣嚎绋嬬殑瀛︿範搴旇鏄潪甯搁噸瑕佺殑涓椤瑰涔犱换鍔′簡锛屼粖澶╋紝鎴戜滑灏变竴璧锋潵浜嗚В涓涓嬶紝鍦ㄨ繘琛岀嚎绋嬪鐞嗚繃绋嬩腑閮芥湁鍝簺鎿嶄綔鏂瑰紡銆傞湇钀ava鍩硅甯屾湜閫氳繃瀵规湰鏂囩殑闃呰锛岃兘澶熸彁楂樺ぇ瀹跺绾跨▼澶勭悊鐨勬妧鏈兘鍔涖缁堟绾跨▼(stop)涓嶆帹鑽愪娇鐢═hread.stop(),浠栦細閲婃斁鎵鏈夌殑monitor,瀵艰嚧鏁版嵁涓嶄竴鑷....
  • Java濡備綍瀹炵幇绾跨▼鐨勬殏鍋滃拰閲嶆柊鍚敤?姹傚ぇ绁
    绛旓細JAVA涓嚎绋寮濮嬫湁start鏂规硶锛屾殏鍋滅敤sleep(time)鏂规硶锛绾跨▼鍋滄鐢╯top鏂规硶锛岀嚎绋嬬瓑寰厀ait鏂规硶锛宩ava 涓病鏈夌嚎绋嬮噸鍚竴璇达紝鍙兘璇寸嚎绋嬪敜閱抧otifyAll()鎴栨槸notify鏂规硶锛屽墠涓涓猲otifyAll()鏂规硶鏄敜閱掓墍鏈夌殑宸蹭紤鐪犳垨鏄瓑寰呯姸鎬佷笅鐨勭嚎绋嬨傚叿浣撶殑涓绉嶅弬鏁拌鍙傜収JDK鏂囨。銆侸ava涓殑绾跨▼鐨勭敓鍛藉懆鏈熷ぇ浣撳彲鍒嗕负5绉嶇姸鎬...
  • java鏆傚仠涓庢仮澶绾跨▼
    绛旓細Thread.suspend();Thread.resume();涔嬫墍浠ヨ繃鏃舵槸鍥犱负鍏跺彲鑳介犳垚姝婚攣銆傛墍浠ョ幇鍦ㄥ彲浠ョ敤 wait鍜宯otify鏉ヤ唬鏇匡紝浣嗚繖涓や釜鏂规硶蹇呴』鐢ㄥ湪synchronize閲岄潰銆傛墍浠ュ鏋滄槸涓鑸満鍚堝彲鐢ㄥ惊鐜彉閲忔潵鎺у埗绾跨▼锛寃hile(flag){ dosomething()..Thread.sleep(100);} 璁剧疆flag涓篺alse鍒欏惊鐜缁撴潫锛岃繖涓嚎绋嬩篃缁撴潫銆傛仮澶嶆椂闇瑕佸垱寤轰竴...
  • 濡備綍鍏抽棴java绾跨▼
    绛旓細濂介棶棰橈紝Thread绫荤殑stop()鏂规硶宸茬粡搴熷純锛屼笉鎺ㄨ崘浣跨敤浜嗐傜幇鍦ㄨ鍏抽棴绾跨▼閫氬父閮芥槸閲囩敤鏉′欢鎺у埗娉曘傚鏋滀綘鐨勭嚎绋嬬殑run鏂规硶閲岄潰鏄痺hile鐨勫惊鐜紝閭d箞鍙鎺у埗while鏉′欢锛岃瀹冭繑鍥瀎alse绾跨▼鐨剅un鏂规硶灏变細缁撴潫锛岀嚎绋嬩粠鑰岀粨鏉熷叧闂
  • Java 涓濡傚拰璁╃偣鍑讳簨浠鍋滄绾跨▼
    绛旓細棣栧厛浣犲湪鏋勯犺繖涓绾跨▼鐨勬椂鍊欙紝瑕佹妸杩欎釜绾跨▼鐨勫紩鐢ㄤ繚瀛樹笅鏉ワ紝灏辨槸鍦ㄤ綘鐨勬寜閽殑鐐瑰嚮浜嬩欢浠g爜閲屽ご鍙互璁块棶鍒帮紝鍙互璁块棶鍒板悗锛屽氨鍙互.start();鍚姩浜嗭紝缁堟鐨勮瘽鏈濂藉紕涓猙oolean鏍囧織鍙橀噺,璁╁叾閫鍑哄惊鐜紙鍥犱负浠ヤ綘鐨勬剰鎬濓紝鑲畾閭d釜绾跨▼涓嶄細鑷繁鍋滀笅鏉ワ紝鎵浠ユ槸寰幆锛夛紝浠庤岄鍑簉un()鏂规硶锛岀嚎绋嬩篃灏缁撴潫浜 ...
  • JAVA 濡備綍鍋滄涓涓繍琛岀潃鐨勬寚瀹绾跨▼?
    绛旓細鍏堝畾涔変竴涓猙oolean绫诲瀷锛屽亣璁 boolean flag = true锛泈hiel(flag){ 鎵ц绾跨▼浠g爜銆傘傘倉 褰撲笉鎯宠绾跨▼缁х画杩愯鐨勬椂鍊欏氨鎶奻lag鏀逛负false灏辫浜 涓鑸幇鍦ㄩ兘涓嶇敤stop鐨勪簡锛岃屼笖jdk涔熸姏寮冧簡stop鏂规硶銆
  • 扩展阅读:java线程池配置参数 ... java线程阻塞怎么解决 ... java开启新线程 ... javascript入门 ... java多线程代码 ... java启动线程的方法 ... java如何关闭线程 ... java线程优先级能改变吗 ... java多线程实现的四种方式 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网