Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java¶àÏß³ÌThread VS RunnableÏê½â
 
À´Ô´£ºblog.csdn.net ·¢²¼ÓÚ 2017-1-6
  1551  次浏览      32
 

½ø³ÌÓëÏß³Ì

½ø³ÌÊdzÌÐòÔÚ´¦Àí»úÖеÄÒ»´ÎÔËÐС£Ò»¸ö½ø³Ì¼È°üÀ¨ÆäËùÒªÖ´ÐеÄÖ¸ÁҲ°üÀ¨ÁËÖ´ÐÐÖ¸ÁîËùÐèµÄϵͳ×ÊÔ´£¬²»Í¬½ø³ÌËùÕ¼ÓõÄϵͳ×ÊÔ´Ïà¶Ô¶ÀÁ¢¡£ËùÒÔ½ø³ÌÊÇÖØÁ¿¼¶µÄÈÎÎñ£¬ËüÃÇÖ®¼äµÄͨÐźÍת»»¶¼ÐèÒª²Ù×÷ϵͳ¸¶³ö½Ï´óµÄ¿ªÏú¡£

Ïß³ÌÊǽø³ÌÖеÄÒ»¸öʵÌ壬ÊDZ»ÏµÍ³¶ÀÁ¢µ÷¶ÈºÍ·ÖÅɵĻù±¾µ¥Î»¡£Ïß³Ì×Ô¼º»ù±¾Éϲ»ÓµÓÐϵͳ×ÊÔ´£¬µ«Ëü¿ÉÒÔÓëͬÊôÒ»¸ö½ø³ÌµÄÆäËûÏ̹߳²Ïí½ø³ÌËùÓµÓеÄÈ«²¿×ÊÔ´¡£ËùÒÔÏß³ÌÊÇÇáÁ¿¼¶µÄÈÎÎñ£¬ËüÃÇÖ®¼äµÄͨÐźÍת»»Ö»ÐèÒª½ÏСµÄϵͳ¿ªÏú¡£

JavaÖ§³Ö¶àÏ̱߳à³Ì£¬Òò´ËÓÃJava±àдµÄÓ¦ÓóÌÐò¿ÉÒÔͬʱִÐжà¸öÈÎÎñ¡£JavaµÄ¶àÏ̻߳úÖÆÊ¹ÓÃÆðÀ´·Ç³£·½±ã£¬Óû§Ö»Ðè¹Ø×¢³ÌÐòϸ½ÚµÄʵÏÖ£¬¶ø²»Óõ£Ðĺǫ́µÄ¶àÈÎÎñϵͳ¡£

JavaÓïÑÔÀÏ̱߳íÏÖΪÏß³ÌÀà¡£ThreadÏß³ÌÀà·â×°ÁËËùÓÐÐèÒªµÄÏ̲߳Ù×÷¿ØÖÆ¡£ÔÚÉè¼Æ³ÌÐòʱ£¬±ØÐëºÜÇåÎúµØÇø·Ö¿ªÏ̶߳ÔÏóºÍÔËÐÐỊ̈߳¬¿ÉÒÔ½«Ï̶߳ÔÏó¿´×÷ÊÇÔËÐÐÏ̵߳ĿØÖÆÃæ°å¡£ÔÚÏ̶߳ÔÏóÀïÓкܶ෽·¨À´¿ØÖÆÒ»¸öÏß³ÌÊÇ·ñÔËÐУ¬Ë¯Ãߣ¬¹ÒÆð»òÍ£Ö¹¡£Ïß³ÌÀàÊÇ¿ØÖÆÏß³ÌÐÐΪµÄΨһµÄÊֶΡ£Ò»µ©Ò»¸öJava³ÌÐòÆô¶¯ºó£¬¾ÍÒѾ­ÓÐÒ»¸öÏß³ÌÔÚÔËÐС£¿Éͨ¹ýµ÷ÓÃThread.currentThread·½·¨À´²é¿´µ±Ç°ÔËÐеÄÊÇÄÄÒ»¸öÏ̡߳£

Ï̴߳´½¨µÄÁ½ÖÖ·½·¨

JAVAÖд´½¨Ï߳̿ÉÒÔͨ¹ý¼Ì³ÐThreadÀàºÍʵÏÖRunnable½Ó¿ÚÀ´´´½¨Ò»¸öÏ̡߳£Runnable·½Ê½¿ÉÒÔ±ÜÃâThread ·½Ê½ÓÉÓÚJAVAµ¥¼Ì³ÐÌØÐÔ´øÀ´µÄȱÏÝ¡£RunnableµÄ´úÂë¿ÉÒÔ±»¶à¸öÏß³Ì(ThreadʵÀý)¹²Ïí£¬ÊʺÏÓÚ¶à¸öÏ̴߳¦Àíͬһ×ÊÔ´µÄÇé¿ö¡£

¼Ì³ÐThreadÀà

class MyThread extends Thread{
.....
@Override
public void run(){

}

}

MyThread mt=new MyThread();
mt.start();

ʵÏÖRunnable½Ó¿Ú

class MyThread implements Runnable{
....
@Override
public void run(){

}
}

MyThread mt=new MyThread();
Thread td=new Thread(mt);
sd.start();

Thread&Runnable·Ö±ðÄ£ÄâÂô»ð³µÆ±

Thread·½Ê½

class MyThread extends Thread
{
private int ticketsCont=5; //Ò»¹²ÓÐ5ÕÅ»ð³µÆ±

private String name; //´°¿Ú, Ò²¼´ÊÇÏ̵߳ÄÃû×Ö

public MyThread(String name){
this.name=name;
}

@Override
public void run(){

while(ticketsCont>0){
ticketsCont--; //Èç¹û»¹ÓÐÆ±£¬¾ÍÂôµôÒ»ÕÅÆ±
System.out.println(name+"ÂôµôÁË1ÕÅÆ±£¬Ê£ÓàÆ±ÊýΪ:"+ticketsCont);
}

}
}

public class TicketsThread
{
public static void main(String args[]){

//´´½¨Èý¸öỊ̈߳¬Ä£ÄâÈý¸ö´°¿ÚÂôƱ
MyThread mt1=new MyThread("´°¿Ú1");
MyThread mt2=new MyThread("´°¿Ú2");
MyThread mt3=new MyThread("´°¿Ú3");

//Æô¶¯Èý¸öỊ̈߳¬Ò²¼´ÊÇ´°¿Ú£¬¿ªÊ¼ÂôƱ
mt1.start();
mt2.start();
mt3.start();

}
}

Runnable·½Ê½

class MyThread2 implements Runnable
{
private int ticketsCont=1000; //Ò»¹²ÓÐ5ÕÅ»ð³µÆ±

@Override
public void run(){


while(true){
synchronized(this){
if(ticketsCont<=0){
break;
}
ticketsCont--; //Èç¹û»¹ÓÐÆ±£¬¾ÍÂôµôÒ»ÕÅÆ±

System.out.println(Thread.currentThread().getName()+"
ÂôµôÁË1ÕÅÆ±£¬Ê£ÓàÆ±ÊýΪ:"+ticketsCont);

/*try{
Thread.sleep(50); //ͨ¹ý×èÈû³ÌÐòÀ´²é¿´Ð§¹û
}
catch(Exception e){
System.out.println(e);
}*/

}
}

}

/*@Override //²»¼Óͬ²½Ëø
public void run(){
while(ticketsCont>0){
ticketsCont--; //Èç¹û»¹ÓÐÆ±£¬¾ÍÂôµôÒ»ÕÅÆ±
System.out.println(Thread.currentThread().getName()+"ÂôµôÁË1ÕÅÆ±£¬Ê£ÓàÆ±ÊýΪ:"+ticketsCont);
}
}*/
}

public class TicketsRunnable
{
public static void main(String args[]){

MyThread2 mt=new MyThread2();
//´´½¨Èý¸öÏß³ÌÀ´Ä£ÄâÈý¸öÊÛÆ±´°¿Ú
Thread th1=new Thread(mt,"´°¿Ú1");
Thread th2=new Thread(mt,"´°¿Ú2");
Thread th3=new Thread(mt,"´°¿Ú3");

//Æô¶¯Èý¸öỊ̈߳¬Ò²¼´ÊÇÈý¸ö´°¿Ú£¬¿ªÊ¼ÂôƱ
th1.start();
th2.start();
th3.start();

}
}

Ï̵߳ÄÉúÃüÖÜÆÚ

´´½¨:н¨Ò»¸öÏ̶߳ÔÏó,ÈçThread thd=new Thread()

¾ÍÐ÷:´´½¨ÁËÏ̶߳ÔÏóºó,µ÷ÓÃÁËÏ̵߳Ästart()·½·¨(´ËʱÏß³Ì֪ʶ½øÈëÁËÏ̶߳ÓÁÐ,µÈ´ý»ñÈ¡CPU·þÎñ ,¾ß±¸ÁËÔËÐеÄÌõ¼þ,µ«²¢²»Ò»¶¨ÒѾ­¿ªÊ¼ÔËÐÐÁË)

ÔËÐÐ:´¦ÓÚ¾ÍÐ÷״̬µÄÏß³Ì,Ò»µ©»ñÈ¡ÁËCPU×ÊÔ´£¬±ã½øÈëµ½ÔËÐÐ״̬£¬¿ªÊ¼Ö´ÐÐrun()·½·¨ÀïÃæµÄÂß¼­

ÖÕÖ¹:Ï̵߳Ärun()·½·¨Ö´ÐÐÍê±Ï£¬»òÕßÏ̵߳÷ÓÃÁËstop()·½·¨,Ïß³Ì±ã½øÈëÖÕֹ״̬

×èÈû:Ò»¸öÕýÔÚÖ´ÐеÄÏß³ÌÔÚijЩÇé¿öϵ£¬ÓÉÓÚijÖÖÔ­Òò¶øÔÝʱÈóöÁËCPU×ÊÔ´£¬ÔÝÍ£ÁË×Ô¼ºµÄÖ´ÐУ¬±ã½øÈëÁË×èÈû״̬£¬Èçµ÷ÓÃÁËsleep()·½·¨

Ï̵߳ķÖÀà

Óû§Ïß³Ì:ÔËÐÐÔÚǰ̨£¬Ö´ÐоßÓеÄÈÎÎñ³ÌÐòµÄÖ÷Ị̈߳¬Á¬½ÓÍøÂçµÄ×ÓÏ̵߳ȶ¼ÊÇÓû§Ïß³Ì

ÊØ»¤Ïß³Ì:ÔËÐÐÔÚºóÍ·£¬ÎªÆäËûǰ̨Ï̷߳þÎñ¡£Ò»µ©ËùÓÐÓû§Ï̶߳¼½áÊøÔËÐУ¬ÊØ»¤Ï̻߳áËæJVMÒ»Æð½áÊø¹¤×÷¡£¿ÉÒÔͨ¹ýµ÷ÓÃThreadÀàµÄsetDaemon(true)·½·¨À´ÉèÖõ±Ç°µÄÏß³ÌÎªÊØ»¤Ị̈߳¬¸Ã·½·¨±ØÐëÔÚstart()·½·¨Ö®Ç°µ÷Ó㬷ñÔò»áÅ׳ö IllegalThreadStateExceptionÒì³£¡£ÔÚÊØ»¤Ïß³ÌÖвúÉúµÄÐÂÏß³ÌÒ²ÊÇÊØ»¤Ï̡߳£²»ÊÇËùÓеÄÈÎÎñ¶¼¿ÉÒÔ·ÖÅä¸øÊØ»¤Ïß³ÌÀ´Ö´ÐУ¬±ÈÈç¶Áд²Ù×÷»òÕß¼ÆËãÂß¼­¡£

ÊØ»¤Ï̲߳âÊÔ°¸Àý

³¡¾°:Ò»¸öÖ÷Ị̈߳¬Ò»¸öÊØ»¤Ị̈߳¬ÊØ»¤Ï̻߳áÔںܳ¤Ò»¶Îʱ¼äÄÚÏò±¾µØÎļþÖÐдÈëÊý¾Ý£¬Ö÷Ï߳̽øÈë×èÈû״̬µÈ´ýÓû§µÄÊäÈ룬һµ©È·ÈÏÁËÓû§µÄÊäÈë×èÈû¾Í»á½â³ýµô£¬Ö÷Ï̼߳ÌÐøÔËÐÐÖ±µ½½áÊø£¬ÊØ»¤Ïß³ÌÒ²»áËæÐéÄâ»úһͬ½áÊø¡£

import java.io.*;
import java.util.Scanner;

class Daemon implements Runnable
{
@Override
public void run(){
System.out.println("½øÈëÊØ»¤Ïß³Ì");
try{
writeToFile();
}
catch(Exception e){
e.printStackTrace();
}

System.out.println("Í˳öÊØ»¤Ïß³Ì");
}


private void writeToFile() throws Exception{
File filename=new File("F:/Ľ¿ÎÍø(imooc)/ϸ˵¶àÏß³ÌÖ®Thread VS Runnable/daemon.txt");
OutputStream os=new FileOutputStream(filename,true);
int count=0;
while(count<999){
os.write(("\r\nword"+count).getBytes());
System.out.println("ÊØ»¤Ïß³Ì"+Thread.currentThread().getName()+"ÏòÎļþÖÐдÈëword"+count++);
Thread.sleep(1000);
}
}
}

public class DaemonThreadDemo
{
public static void main(String args[]){
System.out.println("½øÈëÖ÷Ïß³Ì"+Thread.currentThread().getName());
Daemon daemonThread=new Daemon();
Thread thread =new Thread(daemonThread);
thread.setDaemon(true);
thread.start();

Scanner sc=new Scanner(System.in);
sc.next();

System.out.println("Í˳öÖ÷Ïß³Ì"+Thread.currentThread().getName());


}
}

²âÊÔ½á¹û

ʹÓÃjstackÉú³ÉÏ߳̿ìÕÕ

jstack¹¤¾ßµ½jdk°²×°Ä¿Â¼binÎļþ¼ÐÏ¡£jstackÄÜÉú³ÉJVMµ±Ç°Ê±¿ÌÏ̵߳ĿìÕÕ(threaddump, ¼´µ±Ç°½ø³ÌÖÐËùÓÐÏ̵߳ÄÐÅÏ¢)¡£°ïÖú¶¨Î»³ÌÐòÎÊÌâ³öÏÖµÄÔ­Òò£¬È糤ʱ¼äÍ£¶Ù¡¢CPUÕ¼ÓÃÂʹý¸ßµÈ¡£

ʹÓ÷½·¨

jstack [-l] <pid> : [-l]¿ÉÓпÉÎÞ£¬±íʾ¹ØÓÚËøµÄ¶þλÐÅÏ¢;<pid>±íʾ½ø³ÌID¡£

×ܽá

½¨ÒéʹÓÃRunnableÕâÖÖ·½Ê½´´½¨Ï̡߳£ ³ÌÐòÖеÄͬһ×ÊÔ´Ö¸µÄÊÇͬһ¸öRunnable¶ÔÏó¡£°²È«µÄÂôƱ³ÌÐòÖÐÐèÒª¼ÓÈëͬ²½synchronized¡£

   
1551 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ