Python3 基础爬虫

CentOS-7.4 DHCP服务器

  返回  

Java创建线程的方式

2021/8/21 12:04:14 浏览:

目录

一、继承Thread类

二、继承Runnable接口

三、继承TimerTask

四、继承Callable接口

五、线程池创建线程(JDK内置的线程池)


一、继承Thread类

public class WorkThread  extends  Thread
{
	//表示线程的可执行方法
	@Override
	public void run()
	{
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName()+"-->执行run方法"+ new  Date());
	}
}

//--------------------------------------------------------------------------
public class Test1
{

	public static void main(String[] args)
	{
		System.out.println("线程名字:"+Thread.currentThread().getName() );
		//创建线程类对象
		WorkThread  wt = new WorkThread();
		
		//方法调用
		//main-->执行run方法
		wt.run();
		
		//JVM无序调度
		//wt.setName("线程一");
		//wt.start();
	}
}

二、继承Runnable接口

public class UserRunnable  implements  Runnable
{
    @Override
	public void run()
	{
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName()+",在运行run方法");
	}

}

//----------------------------------------------------------------------------------
public class Test1
{
	
	public static void main(String[] args)
	{
		//1.构建了实现Runnbale接口对象
		UserRunnable  r = new UserRunnable();
		
		//2.实现Runnbale接口对象r构建成Thread类对象
	    Thread  t  = new Thread(r);
	    Thread  t1  = new Thread(r);

		//3.使用Thread类的start()方法,启动一个线程
		
		t.setName("线程一");
		t1.setName("线程二");
		t.start();
		t1.start();	
	}
}

三、继承TimerTask

public class Tthread extends TimerTask
{
	@Override
	public void run()
	{
		// TODO Auto-generated method stub
		System.out.println(new Date());
		
	}
}
//-------------------------------------------------------------------
public class test
{
	public static void main(String[] args)
	{
		// 定时器
		Timer timer = new Timer();
		// 线程任务
		Tthread thread = new Tthread();
		/*
		 * 启动定时线程 schedule(线程任务对象,延迟时间,间隔时间)
		 */
		timer.schedule(thread, 5, 1000);
		// 延迟五秒后开启线程,开启后每一秒中执行一次。
	}
}

四、继承Callable接口

public class UserRunn  implements  Callable
{
	@Override
	public Object call() throws Exception
	{
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName()+",Callable线程启动");
		String name="张三";
		return name+"完成测试";
	}
}
//--------------------------------------------------------------------------------------
public class Test
{
	public static void main(String[] args)
	{
		FutureTask  ft  = new FutureTask(new UserRunn());
		
		new Thread(ft).start();
		try
		{   //输出返回值
			System.out.println(ft.get());
		} catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Console:Thread-0,Callable线程启动
        张三完成测试

五、线程池创建线程(JDK内置的线程池)

使用线程池创建线程的原因:当反复使用线程对象,可以不必多次创建线程对象,控制内存开销

public class Test
{
	public static void main(String[] args)
	{
		/*
		 * 可缓存的线程池:如果线程池的大小超过了处理任务所需要的线程,
		 * 那么就会回收部分空闲( 60 秒不执行任务)的线程,
		 * 当任务数增加时,此线程池又可以智能的添加新线程来处理任务。
		 * 此线程池不会对线程池大小做限制,
		 * 线程池大小完全依赖于操作系统(或者说 JVM )能够创建的最大线程大小。
		 */
		ExecutorService  servicePool  = Executors.newCachedThreadPool();
		
		
		/*
		 * 2、固定大小的线程池:每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。
		 * 线程池的大小一旦达到最大值就会保持不变,
		 * 如果某个线程因为执行异常而结束,那么线程池会补充一个新线程线。
		 */
		//ExecutorService  servicePool  = Executors.newFixedThreadPool(2);
		
		/*
		 * 3、单线程的线程池:这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。
		 * 如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。
		 * 此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
		 */
		//ExecutorService  servicePool  = Executors.newSingleThreadExecutor();
		for(int i=0;i<4;i++)
		{
			int  index=i;
			servicePool.execute(()->{
				System.out.println(Thread.currentThread().getName()+"输出:"+index);
				try
				{
					Thread.sleep(1*2000);
				} catch (InterruptedException e)
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			});
			
		}
	}
}
public class Test
{
	public static void main(String[] args)
	{
		//4.定时线程池
		ScheduledExecutorService    servicePool  = Executors.newScheduledThreadPool(2);
		
		servicePool.scheduleAtFixedRate(()->{
			
			System.out.println(Thread.currentThread().getName()+",正在执行"+new  Date());
			
		}, 1, 5, TimeUnit.SECONDS);
	}
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号