美文网首页
java多线程

java多线程

作者: 破晓11 | 来源:发表于2020-01-02 10:19 被阅读0次

1.多线程的目的:充分利用cpu资源,并发做多件事

2.线程什么时候让出cpu:

阻塞时 wait,await等待IO

sleep

yield

3.线程是什么:

一条代码执行流,完成一组代码的执行

这一组代码,我们往往成为一个任务

4.cpu执行代码

5.线程并不是越多越好

(1)线程在java中是一个对象,每个java线程都需要一个操作系统线程支持,线程的创建,销毁需要时间,如果线程的创建时间+  销毁时间>执行任务时间,就很不合算

(2)java对象占用堆内存,操作系统线程占用系统内存,根据jvm规范,一个线程默认最大栈1M,这个栈空间需要从系统内存中分配

(3)操作系统需要频繁切换线程上下文(大家都想被运行),影响性能

6.多线程的目的:充分利用cpu并发做事,将代码交给cpu执行,合适数量的线程就构成了一个池

线程池:接收任务,放入队列,工作线程从队列中取出任务,执行,当没有任务时,线程阻塞,当有任务时,唤醒线程执行。

public class ThreadPoolManager {

//1.队列

    private BlockingQueueblockingQueue;

//2.线程集合

    private Listworkers;

public ThreadPoolManager(int taskSize,int threadSize){

blockingQueue =new LinkedBlockingQueue<>(taskSize);

workers = Collections.synchronizedList(new ArrayList());

for (int i =0; i < threadSize; i++) {

Worker worker =new Worker(this);

workers.add(worker);

worker.start();

}

}

//将任务放入队列中

    public boolean addTask(Runnable runnable){

if (isShutDown)

return blockingQueue.offer(runnable);

else

            return false;

}

//每个线程需要去干的活

    public static class Workerextends Thread{

ThreadPoolManagermThreadPoolManager;

public Worker(ThreadPoolManager threadPoolManager){

this.mThreadPoolManager = threadPoolManager;

}

@Override

        public void run() {

while (this.mThreadPoolManager.isShutDown||this.mThreadPoolManager.blockingQueue.size()>0){

Runnable runnable =null;

try {

if (this.mThreadPoolManager.isShutDown) {

runnable =mThreadPoolManager.blockingQueue.take();//以阻塞的方式拿

                    }else {

runnable =mThreadPoolManager.blockingQueue.poll();//不阻塞

                    }

}catch (InterruptedException e) {

e.printStackTrace();

}

if (runnable!=null){

runnable.run();

System.out.println("当前线程:"+Thread.currentThread().getName()+"执行了");

}

}

}

}

private volatile boolean isShutDown =true;

public void shutDown(){

isShutDown =false;

for (Thread worker :workers) {

if (worker.getState().equals(Thread.State.BLOCKED))

worker.interrupt();

}

}

}

相关文章

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • (五) volatile关键字

    Java多线程目录 1 背景 理解Java多线程的内存抽象逻辑请阅读java多线程内存模型,当代操作系统,处理器为...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

网友评论

      本文标题:java多线程

      本文链接:https://www.haomeiwen.com/subject/ummnoctx.html