美文网首页
Java 并发并行, 新起线程方式

Java 并发并行, 新起线程方式

作者: 攻城狮托马斯 | 来源:发表于2020-05-12 13:39 被阅读0次

进程和线程的区别


进程是操作系统进行资源分配的最小单位. 资源有(内存, I/O)等

线程是CPU调动执行任务的最小单位,线程必须依赖于进程存在. 一个CPU的内核可以执行一个线程。

CPU时间调度算法


一次切换线程会导致20000CPU周期, 时间调度算法在之前写过的一篇文章里有

https://www.jianshu.com/writer#/notebooks/43362804/notes/61179958

并行和并发的区别(Parallel & Concurrent)


并行:同时可以进行的任务数,几个CPU可以同时几个任务,同时处理任务

并发:一个CPU在一定时间内可以完成哪几个任务。

并行/多线程的好处: 充分利用CPU资源,增加响应时间, 使代码模块化,异步化,简单化。

多线程/高并发的挑战:

1.对数据产生竞争,产生死锁,抢锁竞争

2.OS限制: 每一个线程需要栈空间(1MB),用于储存将要使用数据的指针。因此每开一个线程会消耗大量的资源. mySQL的线程在150-250之间.

新启线程的方式


private static class UseThread extends Thread{ // 对线程的抽象

@Override

    public void run() {

super.run();

        System.out.println("I extends thread")

}

}

private static class UseRunnable implements Runnable { // 对任务,业务逻辑的抽象

@Override

    public void run() {

System.out.println("I implements Runnable");

    }

}

Thread和Runnable的不同:

Thread拓展Thread类,只能拓展一次,而基于runnable的线程可以实现多个接口。

Thread属于thread,而runnable用于实现业务逻辑.

通常, 如果需要创建thread, 那就拓展thread类, 而如果需要实现业务逻辑,则实现runnable,

然后把runnable object当作参数传到不同的thread initialization中去,此时runnable中的数据在多个线程中共享。

ex.

ImplementRunnable r1 = new ImplementRunnable();

Thread t1 = new Thread(r1, "张三");

Thread t2 = new Thread(r1, "lisi");

t1.start();

t2.start();

这时候, t1和t2两个thread同时运行runnable中的逻辑,并且共享其中的数据.

如果直接运行runnable(),这样的话只会当做普通的对象方法执行,并不会创建一个新线程。也就是说程序得等到r2.run()方法执行后,才执行r1.run()。。。

FutureTask, 实现RunnableFuture的接口,

对于具体的 Runnable 或者 Callable 任务的执行结果进行取消、查 询是否完成、获取结果。

Callable和Runnable的区别


相同点:  1、两者都是接口2、两者都需要调用Thread.start启动线程 

 不同点:1、如上面代码所示,callable的核心是call方法,允许返回值,runnable的核心是run方法,没有返回值2、call方法可以抛出异常,但是run方法不行3、因为runnable是java1.1就有了,所以他不存在返回值,后期在java1.5进行了优化,就出现了callable,就有了返回值和抛异常4、callable和runnable都可以应用于executors。

Stop vs.Interrupt()


不建议使用:

Stop(): 不会释放线程占有资源

应该使用:

Interrupt(): 给线程打招呼,不会强制关掉线程,线程可以不理会.

在JDK中,线程是协作式的,而不是抢占式的,也可以通过isInterrupted来检查是否需要强制暂停线程。

相关文章

  • Java 并发并行, 新起线程方式

    进程和线程的区别 进程是操作系统进行资源分配的最小单位. 资源有(内存, I/O)等 线程是CPU调动执行任务的最...

  • java多线程基础1

    java_basic 1 线程分类 2 并发与并行 3 创建线程得方式 4 线程的生命周期 5 ...

  • 一. Java并发和多线程简介

    Java并发是一个涉及了java平台上多线程(MultiTheadings)、并发(Concurrency)和并行...

  • java高并发之从零到放弃

    前言 这是一个长篇博客,希望大家关注我并且一起学习java高并发 废话不多说,直接开始 并行和并发 并行:多个线程...

  • Java基础(六)

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

  • Tutorial

    Java Concurrency涵盖了Java平台上的多线程、并发性和并行性。这包括Java并发工具、问题以及解决...

  • python网络爬虫:多任务-进程、线程

    一 、实现多任务的方式 多线程多进程协程多线程+多进程 并行,并发 并行:同时发起同时执行,(4核,4个任务)并发...

  • Java核心类库 —— 线程和并发

    java核心类库之-------线程和并发体系图 1.基础操作 1.1 并发与并行 1.2 进程和线程 1...

  • Java多线程知识点汇总

    Java 多线程 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 并行与并发:并行:多个cpu实例或者...

  • 1、并发编程-概述

    并发编程 概述 这门课讲什么 这门课中的【并发】一词涵盖了在Java平台上的 进程 线程 并发 并行 以及Java...

网友评论

      本文标题:Java 并发并行, 新起线程方式

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