概述: 进程有多条执行路径, 合成为: 多线程.
进程和线程的描述:
进程:
可执行程序(文件), 例如: .exe//可以把进程理解为一辆车.
一台电脑上可以有多个进程, 这些进程之间的数据是相互隔离的.//例如: qq.exe, wechat.exe
线程:
线程是进程的执行路径(执行单元)//可以把线程理解为: 是马路
一个进程可以有多条线程, 这些线程可以共享该进程的数据.//例如: 往QQ群共享放一个文件, 该群中的所有的用户都可以下载.
进程依托于系统,线程依托于CPU 多线程并行和并发的区别:
并行: 两个(多个)线程同时执行. //前提: 需要多核CPU 并发:
两个(多个)线程同时请求执行, 但是CPU同一瞬间只能执行一个线程,
于是就安排这些线程交替执行, 因为时间间隔非常短, 我们看起来好像是同时执行的, 其实不是. 多线程的实现方式: 链接
方式一: 继承Thread类.
步骤:
1) 定义一个类(MyThread), 继承Thread类.
2) 重写Thread#run(). //重写Thread类中的run()方法.
3) 把要执行的代码放入run()方法中.
4) 在测试类中,创建线程对象.
5) 开启线程. //start() 好处: 代码相对比较简单. //因为是继承Thread类, 所以可以直接使用Thread类中的非私有成员.
弊端: 扩展性相对较差. //因为是继承, 而Java中类之间的继承只能单继承, 不能多继承, 但是可以多层继承. 注意事项:
A: 如果调用run()方法, 只是普通的方法调用.
B: 开启线程必须调用start()方法, 该方法会自动去调用run()方法.
C: 同一线程不能重复开启, 否则会报: IllegalThreadStateException异常. 方式二: 实现Runnable接口.
步骤:
1) 定义一个类(MyRunnable), 实现Runnable接口.
2) 重写Runnable#run().
3) 把要执行的代码放入run()方法中.
4) 在测试类中, 创建Runnable接口的子类对象,
MyRunnable mr = new MyRunnable();
并将其作为参数传入Thread类的构造, 创建线程对象.
Thread th = new Thread(mr);
5) 开启线程. //start() 好处: 扩展性相对较强.
弊端: 代码相对比较 繁琐. 方式三: 结合线程池使用(实现Callable接口). Thread类中的成员:
构造方法:
public Thread();
public Thread(String name);
public Thread(Runnable target);
public Thread(Runnable target,String name); 成员方法:
run(); //里边定义的是线程要执行的代码, 该方法会自动被start()方法调用.
start(); //开启线程, 会自动调用run().
getName();
setName();
sleep(); //休眠线程, 单位是: 毫秒.
currentThread(); //获取当前正在执行的线程对象(的引用). 多线程同步: 链接
概述/作用:
多线程(环境) 并发 操作同一数据, 有可能引发安全问题, 就需要用到同步解决. 分类:
同步代码块:
格式:
synchronized(锁对象) {
//要加锁的代码
}
锁对象:
1) 同步代码块的锁对象可以是任意类型的对象.
2) 必须使用同一把锁, 否则可能出现锁不住的情况. 同步方法:
静态方法:
锁对象: 该类的字节码文件对象.
非静态方法:
锁对象: this 多线程的生命周期
新建, 就绪, 运行(有可能会发生阻塞(系统控制) 或者 等待(可人为控制)状态), 死亡.

java基础之多线程一:概述的更多相关文章

  1. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  2. JAVA基础知识总结1(概述)

    JAVA概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器. 1994年将Oak语言更名为Java. J ...

  3. JAVA基础系列(一) 概述与相关概念

    万事开头难,来这个平台上已经有一段时间了,看到了很多高质量的文章,也很喜欢这种简约的风格.一直也想把自己的零散的知识体系组织起来,但苦于自己拙劣的文笔和不成流派的风格让大家笑话,直到现在才开始.可是从 ...

  4. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

  5. java基础之JDBC一:概述及步骤详解

    1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...

  6. Java基础3-数组操作;类概述

    昨日内容回顾 数据类型 基本数据类型 1) byte, short, int, long, float, double 2) boolean[true, false] 3) char 100: 默认为 ...

  7. C#夯实基础之多线程一:初识多线程

    一. 烧水沏茶问题       在小学四年级有一个烧水沏茶问题,可以作为我们今天讨论话题的引子: 客人来了,要烧一壶茶,但是烧水需要5分钟,洗水壶需要1分钟,洗茶杯需要2分钟,接水需要1分钟,找茶叶需 ...

  8. Java基础系列-二进制操作

    原创文章,转载请标注出处:<Java基础系列-二进制操作> 概述 Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速. Java二进制表示法 首先了解下二进制,二进制是相对十进 ...

  9. Java基础系列--HashMap(JDK1.8)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...

随机推荐

  1. [置顶] 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

    一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对 ...

  2. mysql基本操作(重点)

    显示数据库 show databases 进入指定数据库 use 数据库名称 创建数据库 create database 数据库名称 default character set=utf8 删除数据库 ...

  3. python 函数 hex()

    hex(x)作用:hex() 函数用于将10进制整数转换成16进制整数. x-10进制整数,返回16进制整数 实例: >>>hex(255) '0xff' >>> ...

  4. COGS 2259 异化多肽——生成函数+多项式求逆

    题目:http://cogs.pro:8080/cogs/problem/problem.php?pid=2259 详见:https://www.cnblogs.com/Zinn/p/10054569 ...

  5. Mac eclipse 连接 手机调试

    Mac eclipse 连接 手机调试 更新:2014-11-10 20:13 1 2 3 4 5 6 分步阅读 很多Android程序员 用Mac 来开发.但是Mac下eclipse连接 手机存在一 ...

  6. The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly

    The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly 博客分类: 解决方案_Java   问题描述:T ...

  7. 常用map总结

    Map map = new HashMap(); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry e ...

  8. memcache使用经历

    memcache可以看成是一个大内存库,因为可以集群,所以可以看成是无限大的内存库.既然是内存库,那么我们放的就是一些map了.map里就键值对,虽然内存可以通过集群的方式无限扩展,但单个键值对的大小 ...

  9. Oracle用游标删除重复数据

    CREATE OR REPLACE PROCEDURE PR_MOD_BASE IS cursor c_base IS SELECT MIN(INVENTORY_DATE) IDATE,KUNNR,M ...

  10. thinkphp中url的生成U()方法

    为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响.U方法的定 ...