说起线程要说下线程的概念:线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程(摘自百度);对此不多赘述。一个线程就是一条执行路径,java是支持多线程的语言之一,因而运行在一个应用程序中同时执行多条执行路径,也就是同时运行多条线程,这里说的“同时”是说的宏观上的概念,单核cup是不存在绝对意义上的同时,同时运行的多个线程是指,这多个线程拥有的线程同时拥有cup的执行权和执行资格。

所谓“执行权”是指cup瞬时正在执行的线程就拥有执行权;“执行资格”;是指此时的线程当前cup没有执行它但他有资格:

由此引出线程的状态,状态图如下:

·

下面代码结合这个图做解释,重点关注红色圆圈内的状态

public class ThreadDemo extends Thread{

/*

* 这是创建线程的有两种方式,这是创建线程的第一种方式:直接继承Thread类

*/

/**

* run方法内是线程执行的任务,调用线程的start()方法后就会调用run方法

*/

@Override

public void run() {

super.run();

while(true ){

//Thread.currentThread()取得当前正在运行的线程的name从0开始编号

System.out.println(Thread.currentThread().getName()+"正在运行");

}

}

}

public class Test {

public static void main(String[] args) {

// 此时处于线程的new状态

Thread thread1 = new ThreadDemo();

Thread thread2 = new Thread(new ThradDemo2());

/*

* 处于线程的Runable状态也就是具有执行资格, cup自动做着快速的切换当cup切换到这个线程

* 的时候cup就获得了执行权就会处于Running状态

*/

thread1.start();

thread2.start();

}

}

创建好的线程,也就是实例化的线程是没有被执行的,当线程调用了start方法之后线程才有了生命才开始执行。注意的是直接调用线程的run()方法是没有用的,那跟调用一个对象中的普通方法没有区别要使用线程的start()方法开启线程;

好了有了这些简单的储备之后就写几个demo来比较深入的理解java的多线程,不可避免的问题是多个线程操作同一个资源时会产生线程问题,举个简单的例子来讲,有两个相同的线程任务,这两个线程任务都是同时往一个整形变量里进行加一的操作并输出,就会出现输入相同数字的问题,问题产生的原因就是没有做到线程同步,就是说一个线程任务对变量进行了加一的操作后还没有输出就被两个线程任务夺走了线程的执行权,两一个线程任务拿走执行权后对变量进行加一操作后输出,第一个线程任务获得执行权开始执行刚刚没有完成的任务也就是输出数值,这时候的数值已经变了。

解决的方法无非就是保证线程任务的原子性,就是说说一致性就执行到底,请看下面的demo

public class Resource implements Runnable {

int num = 1;

public synchronized void set() {

System.out.println(Thread.currentThread().getId() + "**********" + (num++));

}

@Override

public void run() {

while (true) {

set();

}

}

}

public class Test {

public static void main(String[] args) {

Resource r = new Resource();

Thread t1 = new Thread(r);

Thread t2 = new Thread(r);

t1.start();

t2.start();

}

}

以上代码解决了线程同步问题,下一章讨论下Synchronized这个关键字

java 管理多线程_Java线程管理(一)多线程相关推荐

  1. java面试题 多线程_Java面试常见关于多线程的面试题

    多线程是Java技术中常用而且相对比较难易理解的一个知识点.而且多线程也是企业实际应用中必备的技术,因此在面试的过程中,面试者经常被问到关于多线程的问题,遇到这些问题大家应该怎么办呢?赶紧恶补一下Ja ...

  2. java多线程采集+线程同步-【多线程数据采集之四】

    前些日子讲解了java数据抓取, 今天就讲解最核心的. java多线程数据抓取. java多线程采集+数据同步+线程同步[多线程数据采集之四] 主要讲解多线程抓取,多线程同步,多线程启动,控制等操作. ...

  3. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  4. java dump 工具_Java线程Dump分析工具--jstack

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  5. android 管理类,android 线程管理类

    1. 延时任务以及取消延时的应用场景:实时搜索,文字内容变化时候不发送请求,当停止变化指定时间后再发送请求 2. 使用方法: // 回到主线程 MainThreadHelper.runOnUIthre ...

  6. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  7. Python3 threading的多线程管理中的线程管理与锁

    提到Python的多线程,大家都说鸡肋.至于为什么,一定又要说什么"GIL的全称是Global Interpreter Lock(全局解释器锁)"之类的解释了,哥书读的少,听不太懂 ...

  8. java多线程构造函数_java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解...

    多线程与JVM内存结构的关系[了解]: 对于最后一个有疑问的构造中stackSize参数,其实学过编程滴人从参数字面就比较容易理解,栈大小嘛,这里从官方文档上来了解一下这个参数: 而之前在学习java ...

  9. java hibernate详细_Java事务管理学习之Hibernate详细介绍

    hibernate是jdbc轻量级的封装,本身不具备事务管理的能力,在事物管理层面,一般是委托于底层的jdbc和jta来完成调度的.下面这篇文章主要给大家介绍了Java事务管理学习之Hibernate ...

  10. mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

最新文章

  1. 自定义Kubernetes调度程序来编排高可用性应用程序
  2. 清华大学:智能驾驶背景下转向系统发展趋势
  3. C++——《算法分析与设计》实验报告——最长公共子序列问题
  4. Ajax 登录控件(三)
  5. 使用Android 实现计算器功能
  6. 从无到有axure原型设计_从零开始学Axure原型设计(入门篇)
  7. JDK-8u131 软件安装教程
  8. android谷歌地图v2开发,android google map v2开发环境配置教程
  9. win7 64位纯净版系统下载
  10. 【树】B056_LQ_三角形面积 阅兵方阵 版本分支(递归预处理)
  11. 抖音云控系统领先品牌
  12. 使用按键精灵实现界面点击自动化
  13. 论文 Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction
  14. java使用 openoffice+swftools+flexpaper 在window下完成简单的文件预览
  15. Kmeans K均值聚类,OpenCV实现
  16. 电弧光保护系统 就选汉光HKHB-608智能电弧光保护系统
  17. 设计一个程序,程序中有三个类,Triangle,Lader,Circle。
  18. python阿凡提与国王下棋_阿基米德与国王下棋的故事
  19. 《英语修辞与写作(修订版)》黄任(编著)epub+mobi+azw3格式下载
  20. 【读书笔记】《奇特的一生》

热门文章

  1. BZOJ1096[ZJOI2007] 仓库建设
  2. vue学习笔记-接口调用-axios
  3. ad如何设置pcb板子形状_FAQ031:如何将Altium的PCB板子导入CST
  4. centos7升级内核
  5. python自动化_Python 接口自动化
  6. python列表常用方法_python 列表常用方法
  7. hive 筛选出数字_后悔没早点学会这几个万能的Excel筛选技巧,这些操作技巧得记牢...
  8. 如何使用递归及注意事项
  9. 协方差检验用在什么地方_胶带还有什么隐藏功能,看看这几个,家里很多地方用得到...
  10. html内容change事件,HTML onvolumechange事件用法及代码示例