zoukankan      html  css  js  c++  java
  • 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();
    		}
    	}
    }
    
  • 相关阅读:
    【Log Explorer】查看和恢复数据库数据
    【MSMQ】消息队列(Message Queue)简介及其使用
    【核心对象】我心目中的Asp.net核心对象
    【SQL Server】CROSS APPLY和OUTER APPLY的应用详解
    【批处理】时间处理
    15件事造就有理想的程序员
    IE8下定义IE=EmulateIE7与IE=7的区别
    【批处理】创建快捷方式
    Ghost备份出错导致磁盘空间被占用
    【AJAX】反向Ajax第1部分:Comet介绍
  • 原文地址:https://www.cnblogs.com/masterlibin/p/4794604.html
Copyright © 2011-2022 走看看