- // ¹Ù·½½»Á÷ȺºÅ£¬711841924
- // ˵Ã÷£ºÒÔÏ´úÂëÓÃÓÚÔÚJava»·¾³ÖлñÈ¡µ±Ç°ËùÓÐÏ̵߳ÄÐÅÏ¢£¬²¢ÌṩÖÕÖ¹Ö¸¶¨Ï̵߳ŦÄÜ¡£
- // »ñÈ¡µ±Ç°ËùÓÐÏß³Ì
- function getAllThreads() {
- try {
- // Ê×ÏÈ»ñÈ¡µ±Ç°Ï̵߳ÄÏß³Ì×é
- var rootGroup = java.lang.Thread.currentThread().getThreadGroup();
- // ÏòÉϱéÀúÏß³Ì×飬ֱµ½ÕÒµ½¸ùÏß³Ì×é
- while (rootGroup.getParent() != null) {
- rootGroup = rootGroup.getParent();
- }
- // ´´½¨Ò»¸öÊý×éÓÃÓÚ´æ´¢Ï̶߳ÔÏó£¬Êý×é´óСΪµ±Ç°Ïß³Ì×é»î¶¯Ï̵߳ÄÊýÁ¿
- var threadArray = java.lang.reflect.Array.newInstance(
- java.lang.Class.forName("java.lang.Thread"),
- rootGroup.activeCount()
- );
- // ½«µ±Ç°Ïß³Ì×éÖеÄËùÓлÏß³Ìö¾Ùµ½threadArrayÖУ¬²¢¼Ç¼ʵ¼Ê´æ´¢µÄÏß³ÌÊýÁ¿
- var count = rootGroup.enumerate(threadArray);
- // ´´½¨Ò»¸öJavaScriptÊý×éÀ´´æ´¢JavaÏ̶߳ÔÏó
- var threads = [];
- // ±éÀúthreadArray£¬½«ËùÓÐÏ̶߳ÔÏóÌí¼Óµ½threadsÊý×éÖÐ
- for (var i = 0; i < count; i++) {
- threads.push(threadArray[i]);
- }
- // ·µ»Ø°üº¬ËùÓÐÏ̶߳ÔÏóµÄÊý×é
- return threads;
- } catch (e) {
- // Èç¹û·¢ÉúÒì³££¬·µ»ØÒ»¸ö¿ÕÊý×é
- return [];
- }
- }
- // »ñÈ¡Ïß³ÌÃû³Æ
- function getThreadNames() {
- // µ÷ÓÃgetAllThreadsº¯Êý»ñÈ¡ËùÓÐÏ̶߳ÔÏó£¬È»ºóʹÓÃmap·½·¨Ìáȡÿ¸öÏ̵߳ÄÃû³Æ
- return getAllThreads().map(function(t){return t.getName()});
- }
- // ÖÕÖ¹Ö¸¶¨Ïß³Ì
- function stopThread(threadName) {
- // »ñÈ¡ËùÓÐÏ̶߳ÔÏó
- var threads = getAllThreads();
- // ±éÀúËùÓÐÏ̶߳ÔÏó£¬Ñ°ÕÒÃû³ÆÓëthreadNameÆ¥ÅäµÄÏß³Ì
- for (var i = 0; i < threads.length; i++) {
- if (threads[i].getName() === threadName) {
- try {
- // ¶ÔÕÒµ½µÄÏ̵߳÷ÓÃinterrupt·½·¨³¢ÊÔÖÕÖ¹Ïß³Ì
- threads[i].interrupt();
- // ·µ»Ø³É¹¦ÖÕÖ¹Ï̵߳ÄÏûÏ¢
- return "ÒÑÖÕÖ¹Ïß³Ì: " + threadName;
- } catch (e) {
- // Èç¹ûÖÕÖ¹Ï̹߳ý³ÌÖз¢ÉúÒì³££¬·µ»Ø°üº¬´íÎóÐÅÏ¢µÄÏûÏ¢
- return "ÖÕÖ¹Ïß³Ìʧ°Ü: " + e;
- }
- }
- }
- // Èç¹ûûÓÐÕÒµ½Ãû³ÆÆ¥ÅäµÄỊ̈߳¬·µ»ØÎ´ÕÒµ½Ï̵߳ÄÏûÏ¢
- return "δÕÒµ½Ïß³Ì: " + threadName;
- }
- // ʹÓÃʾÀý
- // ´òÓ¡µ±Ç°ËùÓÐÏ̵߳ÄÃû³Æ
- printl("µ±Ç°Ïß³Ì: " + getThreadNames().join(", "));
- // ÖÕÖ¹Ïß³ÌʾÀý
- // ³¢ÊÔÖÕÖ¹Ãû³ÆÎª "Ïß³ÌÃû³Æ" µÄÏß³Ì
- var result = stopThread("Ïß³ÌÃû³Æ");
- printl(result);
¸´ÖÆ´úÂëgetAllThreads º¯ÊýÓÃÓÚ»ñÈ¡µ±Ç°JavaÐéÄâ»úÖÐËùÓлÏ̵߳ÄÐÅÏ¢¡£Ëüͨ¹ý»ñÈ¡µ±Ç°Ï̵߳ÄÏß³Ì×飬Ȼºó²»¶ÏÏòÉϱéÀú£¬Ö±µ½ÕÒµ½¸ùÏß³Ì×é¡£½Ó×Å£¬ÀûÓà enumerate ·½·¨½«ËùÓÐÏß³Ìö¾Ùµ½Ò»¸öÊý×éÖУ¬²¢·µ»ØÕâ¸öÊý×é¡£
getThreadNames º¯Êýµ÷Óà getAllThreads º¯Êý»ñÈ¡ËùÓÐÏ̶߳ÔÏóºó£¬Ê¹Óà map ·½·¨Ìáȡÿ¸öÏ̵߳ÄÃû³Æ£¬ÐγÉÒ»¸öеÄÊý×é²¢·µ»Ø¡£Õâ¸öÊý×é°üº¬ÁËËùÓлÏ̵߳ÄÃû³Æ¡£
stopThread º¯ÊýÓÃÓÚ³¢ÊÔÖÕÖ¹Ö¸¶¨Ãû³ÆµÄÏ̡߳£Ëü±éÀúËùÓÐÏ̶߳ÔÏó£¬Ñ°ÕÒÃû³ÆÓë´«Èë²ÎÊý threadName Æ¥ÅäµÄÏ̡߳£ÈôÕÒµ½Æ¥ÅäµÄỊ̈߳¬Ôòµ÷ÓøÃÏß³ÌµÄ interrupt ·½·¨£¬ÕâÊÇÒ»ÖÖÇëÇóÏß³ÌÍ£Ö¹µÄ·½Ê½¡£ÐèҪעÒâµÄÊÇ£¬interrupt ·½·¨½ö»áÉèÖÃÏ̵߳ÄÖжÏ״̬£¬²¢²»»áÇ¿ÖÆÖÕÖ¹Ị̈߳¬Ï̱߳ØÐë×ÔÉí¼ì²éÖжÏ״̬²¢¾ö¶¨ÈçºÎÏìÓ¦¡£Èç¹û³É¹¦ÉèÖÃÁËÖжÏ״̬£¬º¯Êý»á·µ»ØÒ»¸ö³É¹¦ÏûÏ¢£»Èç¹ûÔÚ³¢ÊÔÖÕÖ¹Ï̵߳Ĺý³ÌÖз¢ÉúÁËÒì³££¬º¯Êý»á²¶»ñ¸ÃÒì³£²¢·µ»Ø°üº¬´íÎóÐÅÏ¢µÄÏûÏ¢¡£Èç¹ûûÓÐÕÒµ½ÈκÎÓë threadName Æ¥ÅäµÄỊ̈߳¬º¯Êý»á·µ»ØÒ»¸öδÕÒµ½Ï̵߳ÄÏûÏ¢¡£
×îºó£¬´úÂëÌṩÁËÒ»¸ö¼òµ¥µÄʹÓÃʾÀý£¬Õ¹Ê¾ÁËÈçºÎ´òÓ¡µ±Ç°ËùÓÐÏ̵߳ÄÃû³Æ£¬ÒÔ¼°ÈçºÎ³¢ÊÔÖÕÖ¹Ò»¸öÌØ¶¨Ãû³ÆµÄÏ̡߳£printl º¯Êý±»ÓÃÀ´Êä³öÐÅÏ¢µ½¿ØÖÆÌ¨£¨¼ÙÉè¸Ãº¯ÊýÒѾ¶¨Òå²¢ÇÒÄܹ»ÕýÈ·¹¤×÷£©¡£
ÐèҪעÒâµÄÊÇ£¬ÖÕÖ¹Ï̵߳ķ½Ê½Ó¦¸ÃÊǰ²È«ÇÒ±»Ï̱߳¾ÉíËùÖ§³ÖµÄ£¬·ñÔò¿ÉÄܻᵼÖ³ÌÐò´¦ÓÚ²»Îȶ¨×´Ì¬¡£interrupt ·½·¨ÊÇÒ»ÖֱȽÏκ͵ķ½Ê½À´ÇëÇóÏß³ÌÍ£Ö¹£¬²¢²»ÊÇËùÓÐÏ̶߳¼ÊµÏÖÁ˶ÔÖжϵÄÏìÓ¦
|