java中如何实现线程呢?

书欣 Java面经 发布时间:2022-07-31 08:55:08 阅读数:4226 1
下文笔者讲述java中实现多线程的方法分享,如下所示
实现思路:
  1.继承Tread类
  2.实现Runnable接口
  3.实现Callable接口:带有返回值
例:
继承Thread类创建线程类(extends)
  1.定义Thread类的子类,并重写该类的run方法 
     该run方法的方法体就代表了线程要完成的任务
	 因此把run()方法称为执行体(线程体)。
  2.创建Thread子类的实例,即创建了线程对象。
  3.调用线程对象的start()方法来启动该线程。  
 
  
public class FirstThreadTest extends Thread{  
    int i = 0;  
    //重写run方法,run方法的方法体就是现场执行体  
    public void run()  
    {  
        for(;i<88;i++){  
        log.info(getName()+"  "+i);  
        }  
    }  
 
    public static void main(String[] args)  
    {  
        for(int i = 0;i< 88;i++)  
        {  
            log.info(Thread.currentThread().getName()+"  : "+i);  
            if(i==20)  
            {  
                new FirstThreadTest().start();  
                new FirstThreadTest().start();  
            }  
        }  
    }  
} 
通过Runnable接口创建线程类
 1.定义runnable接口的实现类
  并重写该接口的run()方法
   该run()方法的方法体同样是该线程的线程执行体。
 2.创建 Runnable实现类的实例
  并以此实例作为Thread的target来创建Thread对象
   该Thread对象才是真正的线程对象。
 3.调用线程对象的start()方法来启动该线程。
public class RunnableThreadTest implements Runnable  
{  
  
    private int i;  
    public void run()  
    {  
        for(i = 0;i <88;i++)  
        {  
           log.info(Thread.currentThread().getName()+" "+i);  
        }  
    }  
 
    public static void main(String[] args)  
    {  
        for(int i = 0;i < 88;i++)  
        {  
            log.info(Thread.currentThread().getName()+" "+i);  
            if(i==20)  
            {  
                RunnableThreadTest runner= new RunnableThreadTest();  
                new Thread(runner,"新线程1").start();  
                new Thread(runner,"新线程2").start();  
            }  
        }  
    }   
}  
通过Callable和Future创建线程
 1.创建Callable接口的实现类
  并实现call()方法
   该call()方法将作为线程执行体
   并且有返回值

	public interface Callable
	{
	  V call() throws Exception;
	}
  2.创建Callable实现类的实例
    使用FutureTask类来包装Callable对象
	 该FutureTask对象封装了
	  该Callable对象的call()方法的返回值
	  (FutureTask是一个包装器,它通过接受Callable来创建,
	  它同时实现了Future和Runnable接口)
  3.使用FutureTask对象作为Thread对象的target创建并启动新线程
  4.调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
public class CallableThreadTest implements Callable<Integer>  
{  
  
    public static void main(String[] args)  
    {  
        CallableThreadTest ctt = new CallableThreadTest();  
        FutureTask<Integer> ft = new FutureTask<>(ctt);  
        for(int i = 0;i <88;i++)  
        {  
            log.info(Thread.currentThread().getName()+" 的循环变量i的值"+i);  
            if(i==20)  
            {  
                new Thread(ft,"有返回值的线程").start();  
            }  
        }  
        try  
        {  
            log.info("子线程的返回值:"+ft.get());  
        } catch (InterruptedException e)  
        {  
            e.printStackTrace();  
        } catch (ExecutionException e)  
        {  
            e.printStackTrace();  
        }  
  
    }  
  
    @Override  
    public Integer call() throws Exception  
    {  
        int i = 0;  
        for(;i<88;i++)  
        {  
            log.info(Thread.currentThread().getName()+" "+i);  
        }  
        return i;  
    } 
}   
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202207/16592289624082.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者