一、进程,线程,并发,并行
1.1 进程和线程的区别
      进程是指:一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
        线程是指,进程里的一个执行流程,一个进程可以包含多个线程。比如一个java.exe(进程)可以运行多个线程,线程总是属于某个进程,多个线程之间共享进程的内存。
        多线程:指的是这个程序(一个进程)运行时产生了不止一个线程
 
1.2并发和并行的区别:
     并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序:

     并行,是每个cpu运行一个程序:

      

二、线程的周期和五种状态
 
线程的生命周期 :

 
2.1新建状态(new):当线程被创建后,处于新建状态,如 Thread t1 = new MyThread();
2.2就绪状态(Runnable):当调用线程的star()方法时,进入就绪状态。处于就绪状态表示,线程已经准备好,随时等候cpu调用。
2.3运行状态(Running):当cpu开始调度处于就绪状态的线程时,线程才得以执行,进入运行状态。就绪状态是线程进行到运行状态的唯一途径。
2.4阻塞状态(Blocked):处于运行时状态的线程出于某些原因暂时放弃对cpu的使用权,暂停被执行,此时进入阻塞状态,知道阻塞状态变回就绪状态,才有机会被cpu调度重新进入运行状态。根据阻塞的原因的不同,可以分为3种不同的阻塞状态:
a. 等待阻塞:运行中的线程执行wait()方法进入到阻塞状态;
b. 锁定阻塞:线程在获取同步锁失败时(因为同步锁被其他线程占用),它会进入到锁定阻塞状态;
c. 其他阻塞 : 通过调用线程的sleep(),join(),或者发出I/O请求时,线程会进入到阻塞状态。当线程调用 sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
2.5.死亡状态(Dead):当线程正常结束或者异常退出时,线程进入死亡状态。线程的生命周期结束。
 
 

 
 
三、多线程的创建和启动(第一第二中比较常用)
3.1 继承Thread类,重写该类的run()方法。
 MyThread.java

 /**
* 实现Thread类并重写run方法
* @author luke
*
*/
public class MyThread extends Thread {
private int i = 0; @Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "," + i);
}
}
}

Client.java测试类

 package com.asiainfo.test.thread;

 /**
* 测试类
* @author hasee
*
*/
public class Client {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
if(i == 30) {
Thread myThread1 = new MyThread();//创建一个新的线程,这时的状态为new
Thread myThread2 = new MyThread();//创建一个新的线程,这时的状态为new
myThread1.start();
myThread2.start();
}
}
}
}
3.2 实现Runnable接口,并重写该接口的run()方法
MyRunnalbe.java
 package com.asiainfo.test.thread2;

 /**
* 多线程,通过实现Runnable接口,重写run方法
* @author hasee
*
*/
public class MyRunnalbe implements Runnable {
private int i = 0; /**
* 线程执行体,描述线程需要完成的任务。
*/
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "," + i);
}
} }

RunnableTest.java测试类

 package com.asiainfo.test.thread2;

 /**
* 测试类
* @author hasee
*
*/
public class RunnableTest {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "," + i);
if(i == 30) {
MyRunnalbe runnable = new MyRunnalbe();//创建一个runnable的实现类
Thread t1 = new Thread(runnable);//将runnable作为入参Thread 入参target创建新的线程
Thread t2 = new Thread(runnable);
t1.start();
t2.start();
}
}
}
}
3.3 使用Callable和Future接口创建线程
 

java多线程(一)的更多相关文章

  1. 40个Java多线程问题总结

    前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...

  2. Java多线程基础知识篇

    这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...

  3. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  4. Java多线程系列--“JUC锁”04之 公平锁(二)

    概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...

  5. Java多线程--让主线程等待子线程执行完毕

    使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...

  6. Java多线程 2 线程的生命周期和状态控制

    一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...

  7. java 多线程 1 线程 进程

    Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报  分类: javaSE综合知识点(14)  版权声明:本文为博主原创文章,未经博 ...

  8. 一起阅读《Java多线程编程核心技术》

    目录 第一章 Java多线程技能 (待续...)

  9. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  10. java从基础知识(十)java多线程(下)

    首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...

随机推荐

  1. Luogu 3759 [TJOI2017]不勤劳的图书管理员

    再也不作死写FhqTreap作内层树了,卡的不如暴力呜呜呜…… 题意翻译:给一个序列,每个下标包含两个属性$a$和$v$,求第一个属性与下标形成的所有逆序对的第二个属性和,给出$m$个交换两个下标的操 ...

  2. spark sql使用sequoiadb作为数据源

    目前没有实现,理一下思路,有3中途径: 1:spark core可以使用sequoiadb最为数据源,那么是否spark sql可以直接操作sequoiadb. 2: spark sql支持Hive, ...

  3. TypeError: document.body is null_js报错解决办法

    今天在使用如下js代码的时候,发现报错:document.body is null <script type="text/javascript"> var dw=doc ...

  4. ZOJ - 3057 D - Beans Game(三堆威佐夫博弈)

    Beans Game Time Limit: 5 Seconds Memory Limit: 32768 KB There are three piles of beans. TT and DD pi ...

  5. 使用LogParser 将iis日志导入到数据库中

    --注意修改日志位置和表名--u_ex180228.log 日志所在位置 --IISLog 表名--IISLog_table_0228 表名"C:\Program Files (x86)\L ...

  6. 基于docker虚拟化创建hadoop集群

    最近想用hadoop做一个测试,与性能无关的测试,但是可与屌丝的命,手头没有太多机器,也租不起云主机.这里使用docker进行虚拟化,并搭建hadoop集群,在这里将过程记录如下. 首先安装docke ...

  7. ASP.NET MVC 页面模块编程语法小结

    1.@RenderSection("XXX") 与 @section XXX{} _Layout.cshtml <!DOCTYPE html> <html> ...

  8. spring aop实现权限管理

    问题源于项目开发 最近项目中需要做一个权限管理模块,按照之前同事的做法是在controller层的每个接口调用之前上做逻辑判断,这样做也没有不妥,但是代码重复率太高,而且是体力劳动,so,便有了如题所 ...

  9. 微信小程序小结(5) -- 常用语法

    在 pages 字段的第一个页面就是这个小程序的首页(打开小程序看到的第一个页面). Page生命周期 属性 类型 描述 onLoad Function 生命周期函数--监听页面加载.一个页面只会调用 ...

  10. JS图片转Base64

    网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...