• java创建多线程的三种方式


    /***************************继承Thread类创建多线程************************/
    public class FirstThread extends Thread{
    	private int i;//继承Thread创建线程不共享实例变量
    	public void run()
    	{
    		for (; i < 10; i++) {
    			System.out.println(getName()+" "+i);//通过this.getName()获得线程名称
    		}
    	}
    	public static void main(String[] args)
    	{
    		for (int i = 0; i < 100; i++) {
    			System.out.println(Thread.currentThread().getName()+" "+ i);
    			if(i == 20)
    			{
    				new FirstThread().start();
    				new FirstThread().start();
    			}
    		}
    		
    	}
    }
    
    /************************实现Runnable接口创建多线程*************************/
    public class SecondThread implements Runnable  
    {
    	private int i;//继承Runnable接口共享实例变量
    	public void run()
    	{
    		for(;i < 100; i++)
    		{
    			System.out.println(Thread.currentThread().getName()+" "+i);
    		}
    	}
    	public static void main(String[] args) {
    		for (int i = 0; i < 100; i++) {//继承Runnable接口要通过Tread.currentThread()获得当前进程
    			System.out.println(Thread.currentThread().getName()+" "+i);
    			if(i == 20)
    			{
    				SecondThread st = new SecondThread();//Runnable对象作为Thread对象的target
    				new Thread(st, "新线程1").start();
    				new Thread(st, "新线程2").start();
    			}
    		}
    	}
    }
    
    /************************使用Callable和Future创建线程********************************/
    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
    public class ThirdThread {
    	public static void main(String[] args) 
    	{	//FutureTask类包装了Callable对象,封装了Callable对象的call()方法。
    		//call()方法可以有返回值,也可以声明抛出异常。
    		FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{
    			int i = 0;
    			for(; i < 100; i ++)
    			{
    				System.out.println(Thread.currentThread().getName()+" 的循环变量i的值:"+i);
    			}
    			return i;
    		});
    		
    		for (int i = 0; i < 100	; i++) {
    			System.out.println(Thread.currentThread().getName()+" 的循环变量的值:"+i);
    			if(i == 20)
    			{
    				new Thread(task, "有返回值的线程").start();//task作为Thread类的target
    			}
    		}
    		try
    		{
    			System.out.println("子线程的返回值:" + task.get());//get()获取返回值
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    }
    
  • 相关阅读:
    mysql安装脚本
    vim常用命令
    CentOS 6.5使用国内网易163的源
    053(七十五)
    053(七十四)
    053(七十三)
    053(七十二)
    053(七十一)
    053(七十)
    053(六十九)
  • 原文地址:https://www.cnblogs.com/masterlibin/p/4794604.html
Copyright © 2020-2023  润新知