您的位置:首页 > 职场人生

黑马程序员-java基础-三种实现线程的方式

2015-07-02 00:45 507 查看
-<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-

在java中有两种方式实现线程,继承Thread类和实现Runnable接口  Callable接口

方法一:  一个类只要继承了Thread类,同时覆写了run()方法那么就能实现多线程。
    public class ThreadDemo extends Thread{
private String name;   
         public ThreadDemo(String name)     {        
            this.name=name;  
         }        
         public void run()     {   
            for(int i=0;i<5;i++)        
                System.out.print("Thread运行:"+name+"i->"+i);   
         }
     }
     public class ThreadTest { 
        public static void main(String[] args) {   
            ThreadDemo t1=new ThreadDemo("线程A");  
            ThreadDemo t2=new ThreadDemo("线程B"); 
             //线程启动jvm自动找到run()方法     
             t1.start();    
             t2.start(); 
        }
     }
方法二:  实现Runnable接口,覆写公共的run()方法  
    public class ThreadDemo implements Runnable{  
        private String name;     
        public ThreadDemo(String name)  {     
            this.name=name;    
        }       
        public void run()    {      
            for(int i=0;i<5;i++)       
               System.out.print("Thread运行:"+name+"i->"+i);   
        }
     } 
     public class ThreadTest { 
        public static void main(String[] args) {   
            ThreadDemo t1=new ThreadDemo("线程A"); 
   new Thread(t1).start();
         } 

     } 

 方法三:   实现Callable接口方式

   class ThreadCallable implements Callable<String>{
  public String call(){
 return "haha";
  }
}
public class ThreadPoolDemo1 {
public static void main(String[] args)throws Exception {
ExecutorService es = Executors.newFixedThreadPool(2);
Future<String> f1 = es.submit(new ThreadCallable());
Future<String> f2 = es.submit(new ThreadCallable());

String s1 = f1.get();
String s2 = f2.get();
System.out.println(s1);
System.out.println(s2);
es.shutdown();
}
}

    
      Runable比Thread线程安全

      设置线程名称:
      在Thread类中可以使用setName(String name),Thread(Runnable target,String name),
      Thread(String name)    
      取出线程名称:  在Thread类中可以使用getName(); 
       public static Thread currentThread()得到当前线程的名称 
      在java执行中一个java程序至少启动两个线程:main,gc两个线程。  
   
      线程的休眠:  Thread.sleep(2000)需要try……catch(){}异常为InterruptException中断异常

      线程的同步和异步 

      1,同步代码块  synchronized(this){//同步代码块}  

        public class ThreadDemo implements Runnable{   
           int tick=5;      
           public void run()     {  
               for(int i=0;i<5;i++)     
                    synchronized(this)       {   
                       if(this.tick>0)       
                       System.out.println(Thread.currentThread().getName()+"->"+tick--);   
               }    
           }
        }  
    
        public class ThreadTest {  
             public static void main(String[] args) { 
                  ThreadDemo t1=new ThreadDemo();  
                  new Thread(t1,"线程A").start(); 
                  new Thread(t1,"线程B").start(); 
                  new Thread(t1,"线程C").start(); 
              }
        }
     
      2,同步方法 
        public class ThreadDemo implements Runnable{  
             int tick=5;       
             public void run()     {  
                  this.sail();     
             }      
             public synchronized void sail()     { 
                   for(int i=0;i<5;i++)         {  

9e9e
                          if(this.tick>0)         
                          System.out.println(Thread.currentThread().getName()+"->"+tick--);   
                   }   
             }
         }   

         public class ThreadTest { 
               public static void main(String[] args) { 
                    ThreadDemo t1=new ThreadDemo();  
                    new Thread(t1,"线程A").start(); 
                    new Thread(t1,"线程B").start(); 
                    new Thread(t1,"线程C").start();
               }
          } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程实现方式