一. 基础知识

要了解多线程首先要知道一些必要的概念,如进程,线程等等。开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时。

1. 进程,一般是指程序或者任务的执行过程(是动态执行的)。

2. 线程,一个线程包含多个线程(例如你打开一个word文档这就是一个进程。word里面的写入,拼写检查等等就是一个一个的线程)。

3. 进程包含线程,线程共享进程的资源(内存)

4. 线程的交互,线程在工作时往往需要正确的通信才能完成任务。

5. 互斥,如某线程抢占了CPU资源,其它的线程都要进入等待状体。

6. 同步,就是指共同,协同,互相配合的完成某一项任务。

二. Java多线程

线程的创建有两种方法,一种是继承Thread类,另一种是实现Runnable接口

1. Thread类常用的方法

<1>. 构造方法

Thread()

Thread(String name)

Thread(Runnable target)

Thread(Runnable target, String name)

<2>. 常用Thread类方法

启动线程  void start

线程随眠  static void sleep(long millis)

使其它线程等待当前线程终止  void join()  ; void join(long millis) ;  void join(long millis, int nanos)

使当前运行的线程施放处理器资源  static void yield

获取当前运行的线程引用  static Thread currentThread

2. 两种线程实现方法事例代码

package com.bochao.thread;

class Actress implements Runnable{

	@Override
public void run() { int count = 0;
boolean keepRunning = true;
System.out.println(Thread.currentThread().getName() + "开始....");
while(keepRunning){
System.out.println(Thread.currentThread().getName() + "计数:" + (++count));
if(count == 100){
keepRunning = false;
}
if(count % 10 == 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(Thread.currentThread().getName() + "结束!");
}
} public class ConcurrentDemo extends Thread { @Override
public void run() { int count = 0;
boolean keepRunning = true;
System.out.println(getName() + "开始");
while(keepRunning){
System.out.println(getName() + "计数:" + (++count));
if(count == 100){
keepRunning = false;
}
if(count % 10 == 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(getName() + "结束!");
} public static void main(String[] args) { Thread actor = new ConcurrentDemo();
actor.setName("张三");
actor.start(); Thread actress = new Thread(new Actress(), "李四");
actress.start();
} }

3. 网上找了学习多线程的需要了解的知识体系,学习路线如下:

1. Java Memory Mode
2. Locks 和 Condition 类对象
3. 线程安全性
4. 多线程常用交互模型(Producer-Consumer模型, Read-Write Lock模型,Future模型,Worker Thread模型)
5. Java5中并发编程工具(java.util.concurrent,线程池ExcutorService,Callable和Futrue,BlockingQueue)
6. 推荐两本书:Java核心技术(多线程篇), Java concurrency IN Practice

JAVA多线程基础知识(一)的更多相关文章

  1. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  2. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  3. Java多线程基础知识总结

    2016-07-18 15:40:51 Java 多线程基础 1. 线程和进程 1.1 进程的概念 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程, ...

  4. Java多线程基础知识篇

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

  5. Java多线程基础知识总结笔记

    本篇笔记记录一些在Java多线程编程中常见的关键字,比较简单和基础的就不写太详细了. 一.Thread类(其实也是应用了Runnable接口)和Runnable接口(只有一个run方法,应用该类必须重 ...

  6. Java多线程基础知识例子

    一.管理 1.创建线程 Thread public class Main { public static void main(String[] args) { MyThread myThread = ...

  7. Java多线程基础知识(二)

    一. Java线程具有6种状态  NEW 初始状态,线程被创建,但是还没有调用start方法. RUNNABLE 运行状态,java线程将操作系统中的就绪和运行两种状态笼统的称作进行中. BLOCKE ...

  8. Java多线程-基础知识

    一. 进程是执行中的程序,程序是静态的(我们写完以后不运行就一直放在那里),进程是执行中的程序,是动态概念的.一个进程可以有多个线程. 二. 多线程包含两个或两个以上并发运行的部分,把程序中每个这样并 ...

  9. Java多线程基础知识(五)

    一. Java中的13个原子操作类 在Jdk1.5中,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全的更新一个变量的方式. 1. 原子更新基本类型类 AtomicBoolean : 原子更 ...

随机推荐

  1. linux命令使用记录

    netstat: -a show both listening and none-listening sockets.默认是不显示listening sockets -t 仅显示tcp相关 默认是都显 ...

  2. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  3. git-tag

    标签可以针对某一时间点的版本做标记,常用于版本发布. 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 $ git tag -l 'v0.1.*' # 搜索符合模式的标签 打标签 g ...

  4. 解决Bootstrap模态框切换时页面抖动 or页面滚动条

    Bootstrap为了让所有的页面(这里指内容溢出和不溢出)显示效果一样,采取的方法如下: 当Modal显示时,设置body -- overflow:hidden;margin-right:15px; ...

  5. 基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

    首先确保系统可以联网.设置IP地址以及虚拟机安装linux在此略过.本文采用centos6.7 64位minimal版.php5.6.16.httpd-2.4.18.mysql-5.5.47版搭建la ...

  6. js 对象属性复制到另一个对象

    var obj={a:1,b:2,c:3} var newObj={};for(var i in obj){newObj[i]=obj[i];}console.log(newObj);

  7. Euclidean Space

    http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm

  8. ecshop 网站标题不更新或内容不更新

    网站标题不更新,这种情况一般出在网站搬家的过程中,把以前的所有配置文件一起都搬到新的服务器上了. 网站状态: 后台店铺标题已经修改,前台不显示,数据shop_config 的shop_title能更新 ...

  9. maven 入门

    Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这 ...

  10. C# Thread挂起线程和恢复线程

    前言 众所周知,Thread类中的挂起线程和恢复线程微软已标记过时,因为可能会造成问题   Resume()   恢复当前线程 已过时. Resumes a thread that has been ...