旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java多线程怎样完成【JAVA教程】,java

作者:搜教程发布时间:2019-12-04分类:JAVA教程浏览:62评论:0


导读:java完成多线程的要领:(引荐:java视频教程)体式格局一:继续Thread类的体式格局1、建立一个继续于Thread类的子类2、重写Thread类中的ru...

java完成多线程的要领:(引荐:java视频教程)

体式格局一:继续Thread类的体式格局

1、建立一个继续于Thread类的子类

2、重写Thread类中的run():将此线程要实行的操纵声明在run()

3、建立Thread的子类的对象

4、挪用此对象的start():①启动线程 ②挪用当前线程的run()要领

体式格局二:完成Runnable接口的体式格局

1、建立一个完成Runnable接口的类

2、完成Runnable接口中的笼统要领:run():将建立的线程要实行的操纵声明在此要领中

3、建立Runnable接口完成类的对象

4、将此对象作为参数通报到Thread类的组织器中,建立Thread类的对象

5、挪用Thread类中的start():① 启动线程 ② 挪用线程的run() --->挪用Runnable接口完成类的run()

以下两种体式格局是jdk1.5新增的!

体式格局三:完成Callable接口

申明:

1、与运用Runnable比拟, Callable功用更强大些

2、完成的call()要领比拟run()要领,能够返回值

3、要领能够抛出非常

4、支撑泛型的返回值

5、须要借助FutureTask类,比方猎取返回效果

Future接口能够对细致Runnable、Callable使命的实行效果举行作废、查询是不是完成、猎取效果等。FutureTask是Futrue接口的唯一的完成类FutureTask 同时完成了Runnable, Future接口。它既能够作为Runnable被线程实行,又能够作为Future获得Callable的返回值

体式格局四:运用线程池

申明:

提早建立好多个线程,放入线程池中,运用时直接猎取,运用完放回池中。能够防止频仍建立烧毁、完成反复应用。相似生活中的大众交通工具。

优点:

1、进步响应速度(减少了建立新线程的时候)

2、下降资本斲丧(反复应用线程池中线程,不须要每次都建立)

3、便于线程治理

示例:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadPoolExecutor;

//体式格局一
class ThreadTest extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 体式格局二
class RunnableTest implements Runnable {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 体式格局三
class CallableTest implements Callable<Integer> {

	@Override
	public Integer call() throws Exception {
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
			sum += i;
		}
		return sum;
	}

}

// 体式格局四
class ThreadPool implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}

}

public class Test {
	public static void main(String[] args) {
		// 继续Thread
		ThreadTest thread = new ThreadTest();
		thread.setName("体式格局一");
		thread.start();

		// 完成Runnable
		RunnableTest runnableTest = new RunnableTest();
		Thread thread2 = new Thread(runnableTest, "体式格局二");
		thread2.start();

		// 完成Callable<> 有返回值
		CallableTest callableTest = new CallableTest();
		FutureTask<Integer> futureTask = new FutureTask<>(callableTest);
		new Thread(futureTask, "体式格局三").start();
		// 返回值
		try {
			Integer integer = futureTask.get();
			System.out.println("返回值(sum):" + integer);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 线程池
		ExecutorService pool = Executors.newFixedThreadPool(10);

		ThreadPoolExecutor executor = (ThreadPoolExecutor) pool;
		/*
		 * 能够做一些操纵:
		 * corePoolSize:中心池的大小 
		 * maximumPoolSize:最大线程数
		 * keepAliveTime:线程没使命时最多坚持多长时候后会停止
		 */
		executor.setCorePoolSize(5);

		// 开启线程
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());

	}

}

更多java学问请关注java基础教程栏目。

以上就是java多线程怎样完成的细致内容,更多请关注ki4网别的相干文章!

标签:java


欢迎 发表评论: