第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

多線程實(shí)現(xiàn)的四種方式

標(biāo)簽:
Java 面試

实现多线程有以下四种方式:

1. 继承Thread类

2.实现Runnable接口

3.实现Callable接口

4.线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。

体系结构:

java.util.concurrent.Executor : 负责线程的使用与调度的根接口
         |--ExecutorService 子接口: 线程池的主要接口
               |--ThreadPoolExecutor 线程池的实现类
               |--ScheduledExecutorService 子接口:负责线程的调度
                   |--ScheduledThreadPoolExecutor :继承 ThreadPoolExecutor, 实现 ScheduledExecutorService *

工具类 : Executors 
      ExecutorService newFixedThreadPool() : 创建固定大小的线程池
      ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
      ExecutorService newSingleThreadExecutor() : 创建单个线程池。线程池中只有一个线程
      ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。


1) 继承Thread类

package com.lxj.juc;

public class TestThread {
     public static void main(String[] args) {
    	 ThreadDemo threadDemo = new ThreadDemo();
    	 threadDemo.start();
	 }
}


class  ThreadDemo extends Thread{

	@Override
	public void run() {
	    boolean flag = false;
		for(int i  = 3 ; i < 100 ; i ++) {
			flag = false;
			for(int j = 2; j <= Math.sqrt(i) ; j++) {
				if(i % j == 0) {
					flag = true;
					break;
				}
			}
			if(flag == false) {
				System.out.print(i+"  ");
			}
		}
	}
  
	 
}

运行结果:
3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97

2)实现Runnable接口

package com.lxj.juc;

public class TestRunnable {
    public static void main(String[] args) {
		RunnableDemo runnableDemo = new RunnableDemo();
		new Thread(runnableDemo).start();
	}
}

class RunnableDemo implements Runnable{

	@Override
	public void run() {
		boolean flag = false;
		for(int i  = 3 ; i < 100 ; i ++) {
			flag = false;
			for(int j = 2; j <= Math.sqrt(i) ; j++) {
				if(i % j == 0) {
					flag = true;
					break;
				}
			}
			if(flag == false) {
				System.out.print(i+"  ");
			}
		}
	}
	
}

运行结果:
3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97

3)实现Callable接口

package com.lxj.juc;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class TestCallable1 {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
    	CallableDemo callableDemo = new CallableDemo();
    	FutureTask futureTask = new FutureTask<>(callableDemo); 
    	new Thread(futureTask).start();
    	List<Integer> lists = (List<Integer>)futureTask.get(); //获取返回值
    	for (Integer integer : lists) {
			System.out.print(integer + "  ");
		}
	}
}

class CallableDemo implements Callable<List<Integer>>{

	@Override
	public List<Integer> call() throws Exception {
		boolean flag = false;
		List<Integer> lists = new ArrayList<>();
		for(int i  = 3 ; i < 100 ; i ++) {
			flag = false;
			for(int j = 2; j <= Math.sqrt(i) ; j++) {
				if(i % j == 0) {
					flag = true;
					break;
				}
			}
			if(flag == false) {
				lists.add(i);
			}
		}
		return lists;
	}
	
}

运行结果:
3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97

4) 线程池

package com.lxj.juc;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestThreadPool {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		ExecutorService executorService = Executors.newFixedThreadPool(5);
		List<Future<List<Integer>>> ints = new ArrayList<>();
		for(int i = 0 ; i < 5; i ++) {
			Future<List<Integer>> future = executorService.submit(new Callable<List<Integer>>() {
				@Override
				public List<Integer> call() throws Exception {
					boolean flag = false;
					System.out.println(Thread.currentThread().getName()+"  ");
					List<Integer> lists = new ArrayList<>();
					for(int i  = 3 ; i < 100 ; i ++) {
						flag = false;
						for(int j = 2; j <= Math.sqrt(i) ; j++) {
							if(i % j == 0) {
								flag = true;
								break;
							}
						}
						if(flag == false) {
							lists.add(i);
						}
					}
					return lists;
				}
			});
			ints.add(future);
		}
		
		for (Future<List<Integer>> future : ints) {
			System.out.println(future.get());
		}
	}
}

class ThreadPoolDemo {

}

运行结果:
pool-1-thread-2  
pool-1-thread-5  
pool-1-thread-3  
pool-1-thread-1  
pool-1-thread-4  
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

以上即为创建多线程的4种方式。





點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消