java 多线程简介

原创 2016年12月09日 17:14:21
             进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以线程是轻量级的任务,它们之间的通信和转换只需要较小的系统开销。
Java支持多线程编程,因此用Java编写的应用程序可以同时执行多个任务。Java的多线程机制使用起来非常方便,用户只需关注程序细节的实现,而不用担心后台的多任务系统。

Java语言里,线程表现为线程类。Thread线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用Thread.currentThread方法来查看当前运行的是哪一个线程

class ThreadTest{
public static void main(String args[]){
Thread t = Thread.currentThread();
t.setName("单线程"); //对线程取名为"单线程"
t.setPriority(8);
//设置线程优先级为8,最高为10,最低为1,默认为5
System.out.println("The running thread: " + t);
// 显示线程信息
try{
for(int i=0;i<3;i++){
System.out.println("Sleep time " + i);
Thread.sleep(100); // 睡眠100毫秒
}
}catch(InterruptedException e){// 捕获异常
System.out.println("thread has wrong");
}
}
}
多线程的实现方法
继承Thread类
可通过继承Thread类并重写其中的run()方法来定义线程体以实现线程的具体行为,然后创建该子类的对象以创建线程。

在继承Thread类的子类ThreadSubclassName中重写run()方法来定义线程体的一般格式为: 

public class ThreadSubclassName extends Thread{
public ThreadSubclassName(){
..... // 编写子类的构造方法,可缺省
}
public void run(){
..... // 编写自己的线程代码
}
}
用定义的线程子类ThreadSubclassName创建线程对象的一般格式为:
ThreadSubclassName ThreadObject =
new ThreadSubclassName();
然后,就可启动该线程对象表示的线程:
ThreadObject.start(); //启动线程 
应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。
public class ThreadSubclassName extends Thread{
public ThreadSubclassName(){
..... // 编写子类的构造方法,可缺省
}
public void run(){
..... // 编写自己的线程代码
}
}
用定义的线程子类ThreadSubclassName创建线程对象的一般格式为:
ThreadSubclassName ThreadObject =
new ThreadSubclassName();
然后,就可启动该线程对象表示的线程:
ThreadObject.start(); //启动线程

应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。
class ThreadDemo extends Thread{
private String whoami;
private int delay;
public ThreadDemo(String s,int d){
whoami=s;
delay=d;
}
public void run(){
try{
sleep(delay);
}catch(InterruptedException e){ }
System.out.println("Hello World!" + whoami
+ " " + delay);
}
}
public class MultiThread{
public static void main(String args[]){
ThreadDemo t1,t2,t3;
t1 = new ThreadDemo("Thread1",
(int)(Math.random()*2000));
t2 = new ThreadDemo("Thread2",
(int)(Math.random()*2000));
t3 = new ThreadDemo("Thread3",
(int)(Math.random()*2000));
t1.start();
t2.start();
t3.start();
}
}

实现Runnable接口
编写多线程程序的另一种的方法是实现Runnable接口。在一个类中实现Runnable接口(以后称实现Runnable接口的类为Runnable类),并在该类中定义run()方法,然后用带有Runnable参数的Thread类构造方法创建线程。
创建线程对象可用下面的两个步骤来完成:
(1)生成Runnable类ClassName的对象
ClassName RunnableObject = new ClassName();
(2)用带有Runnable参数的Thread类构造方法创建线程对象。新创建的线程的指针将指向Runnable类的实例。用该Runnable类的实例为线程提供 run()方法---线程体。
Thread ThreadObject = new Thread(RunnableObject);
然后,就可启动线程对象ThreadObject表示的线程:
ThreadObject.start();
在Thread类中带有Runnable接口的构造方法有: 

public Thread(Runnable target);
public Thread(Runnable target, String name);
public Thread(String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,Runnable target,
String name); 

其中,参数Runnable target表示该线程执行时运行target的run()方法,String name以指定名字构造线程,ThreadGroup group表示创建线程组。
用Runnable接口实现的多线程。

class TwoThread implements Runnable{
TwoThread(){
Thread t1 = Thread.currentThread();
t1.setName("第一主线程");
System.out.println("正在运行的线程: " + t1);
Thread t2 = new Thread(this,"第二线程");
System.out.println("创建第二线程");
t2.start();
try{
System.out.println("第一线程休眠");
Thread.sleep(3000);
}catch(InterruptedException e){
System.out.println("第一线程有错");
}
System.out.println("第一线程退出");
}
public void run(){
try{
for(int i = 0;i < 5;i++){
System.out.println(“第二线程的休眠时间:”
+ i);
Thread.sleep(1000);
}
}catch(InterruptedException e){
System.out.println("线程有错");
}
System.out.println("第二线程退出");
}
public static void main(String args[]){
new TwoThread();
}
}


程序运行结果如下:
正在运行的线程: Thread[第一主线程,5,main
创建第二线程
第一线程休眠
第二线程的休眠时间:0
第二线程的休眠时间:1
第二线程的休眠时间:2
第一线程退出
第二线程的休眠时间:3
第二线程的休眠时间:4
第二线程退出


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java多线程介绍

多线程编程一直是大家比较头痛地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程...
  • zdp072
  • zdp072
  • 2016年04月24日 11:59
  • 529

Java并发性和多线程介绍、优缺点

在过去单核CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交...
  • lingyiwin
  • lingyiwin
  • 2017年10月22日 17:36
  • 166

多线程简介(多线程001)

4个基本概念 同步 之前写程序的时候都是从上到下,从左到右,代码执行顺序1个线程执行多个任务,也是依次执行,1个线程同一时间执行1个任务 异步 多个线程可以 "同时" 执行多个任务 进程 当前计算...
  • wangjunling888
  • wangjunling888
  • 2016年05月09日 14:22
  • 666

轻松学会多线程(二)——多线程相关概念介绍

上一篇文章中,我们宏观介绍了多线程的背景,今天我们上一些干货。 在展开讲解多线程之前,我们需要明白进程与线程之间的关系。 进程与线程 一个关于进程和线程的比喻很贴切:一个进程就像是工厂的一个车间,...
  • liu765023051
  • liu765023051
  • 2014年11月02日 15:22
  • 2339

java的poi技术读写excel数据

Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS E...
  • awrqwer
  • awrqwer
  • 2016年04月05日 21:34
  • 1609

三种多线程简介及使用方法

简介 iOS有三种多线程编程的技术,分别是: (一)NSThread (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch) 这三种编程...
  • maiwc
  • maiwc
  • 2016年03月22日 13:22
  • 1866

Java 多线程 简介

/* 进程:正在进行中的程序(直译) 其实对应 在内存中开辟的空间 线程:进程中的一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称为多线程 一个进程中至少有一个线程 开...
  • Aseveng
  • Aseveng
  • 2017年08月17日 14:47
  • 83

多线程——java线程池简介

上次我们回忆了多线程的基础概念,今天,我们来看看Java中对线程池的使用。 一、线程池1、为什么需要       在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其...
  • u010168160
  • u010168160
  • 2017年07月31日 23:22
  • 261

java多线程常用方法简介

线程:可以理解为在进程中独立运行的子任务。他的调用是异步的随机的不是按照代码的顺序执行。 jvm的gc()也就是垃圾回收机制是守护线程。 实现方法:继承Thread类(Thread类也是实现Run...
  • weixin_39513166
  • weixin_39513166
  • 2017年12月02日 13:51
  • 42

Java多线程——并发容器简介

这里主要是简单介绍几种比较常见的并发容器,目的是梳理一下。由于每一个类的底层实现都是非常复杂的,用到了很多精妙的多线程的技巧,限于篇幅和水平,就不做深入的探讨。纸上得来终觉浅,只有多加实践,多看源码,...
  • sakurairo_maukoro
  • sakurairo_maukoro
  • 2015年03月11日 21:25
  • 1139
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 多线程简介
举报原因:
原因补充:

(最多只允许输入30个字)