• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java 多线程

java 多线程

作者:Even_0817 字体:[增加 减小] 来源:互联网 时间:2017-11-12

Even_0817通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

多线程

并发和并行:
并行:指两个或多个事件在同一时刻点发生;
并发:指两个或多个事件在同一时间段内发生。

进程和线程:
进程:是指一个内存中运行中的应用程序。每个进程都有自己独立的一块内存空间
多任务系统,该系统可以运行多个进程,一个进程也可以执行多个任务,一个进程可以包含多个线程.
一个进程至少有一个线程,为了提高效率,可以在一个进程中开启多个执行任务,即多线程。

创建和启动线程,传统有两种方式:
方式1:继承Thread类;
方式2:实现Runnable接口;

1. 线程(Thread)不能重复开启
2. 五种状态
a) 创建:MyThread mt = new MyThread()
b) 就绪:mt.start() -> 不是马上执行,进入线程池
c) 运行:抢到CPU的执行权
d) 堵塞:失去CPU的执行权
e) 死亡:不具有继续运行的能力

3. 实现Runnale接口的方式,必须借助Thread类来运行线程
4. Runnale可以共享对象
5. 一个java程序中至少有2个线程:主线程和垃圾回收线程
6. 线程操作的常用方法
a) is Alive() 判断是否处于活动状态
b) sleep() 线程休眠
c) join() 强制执行线程
d) interrupt() 中断线程某种状态,使之回到运行状态
7. 通过Thread类创建线程,并将实现Runnable接口的子类对象作为参数传递给Thread类的构造函数
8. 线程安全问题
a) 原因:数据共享 多步操作
b) 解决方案:同步代码块 同步函数 Lock锁机制(只有锁相同,才能同步)
c) Java中同步方法的锁就是this
d) Lock锁机制因为没有同步锁,所以不能使用wait() 和 notify()方法
9. 一个线程只能处于一种状态
10. 线程休眠:执行的线程暂停一段时间,进入计时等待状态sleep(). 调用sleep()后,当前线程放弃CPU,在指定时间段内sleep()所在线程不会获得执行机会。此状态下的线程不会释放同步锁/同步监听器

11. 继承方式和实现方式的区别:

继承方式:
1):Java中类是单继承的,如果继承了Thread了,该类就不能再有其他的直接父类了.
2):从操作上分析,继承方式更简单,获取线程名字也简单.(操作上,更简单)
3):从多线程共享同一个资源上分析,继承方式不能做到.
实现方式:
1):Java中类可以多实现接口,此时该类还可以继承其他类,并且还可以实现其他接口
2):从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用.
3):从多线程共享同一个资源上分析,实现方式可以做到(是否共享同一个资源).
多线程—同步
线程的安全问题
a) 同步代码块
(http://img.blog.csdn.net/20171112102055613?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRXZlbl8wODE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
b) 同步函数
(http://img.blog.csdn.net/20171112102207623?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRXZlbl8wODE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
c) Lock锁机制

二、 同步锁
a) 对于非static方法,同步锁就是this.
b) 对于static方法,我们使用当前方法所在类的字节码对象

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28Spring Data Jpa实现分页和排序代码实例
  • 2017-05-28java实现excel和txt文件互转
  • 2017-05-28Spring 实现excel及pdf导出表格示例
  • 2017-05-28详解Java 中程序内存的分析
  • 2017-05-28详谈java线程与线程、进程与进程间通信
  • 2017-05-28Java 关键字static详解及实例代码
  • 2017-05-28Spring Boot实现异步请求(Servlet 3.0)
  • 2017-05-28选择java的理由:java之父访谈实录
  • 2017-05-28java eclipse 出现 xxx cannot be resolved to a type 错误解决方法
  • 2017-05-28详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java中char[]输出不是内存地址的原因详解
    • javaWeb项目部署到阿里云服务器步骤详解
    • 基于Spring + Spring MVC + Mybatis 高性能web构建实例详解
    • SpringMVC结合ajaxfileupload实现文件无刷新上传代码
    • java实现输出字符串中第一个出现不重复的字符详解
    • 利用Java异常机制实现模拟借书系统
    • springboot实现FastJson解析json数据的方法
    • jstl之map,list访问遍历以及el表达式map取值的实现
    • Java序列化和反序列化_动力节点Java学院整理
    • Java经典排序算法之插入排序

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有