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随笔——多线程的简介与实现

又是新的一周,今天讲的是第十三章多线程,在OS里,进程是资源分配的最小单位,线程是cpu调度的最小单位,每个独立运行的程序称为一个进程(Process)。在一个程序内部也可以实现多个任务并发执行,其中...

Java_多线程_简介

3.线程的几种状态 (1).新建 new一个Thread对象,一个线程对象被创建,但没有开启,完成了内存空间的开辟和数据的初始化。 ...

Java多线程简介

世间万物都可以同时完成很多工作,例如,人体可以同时进行呼吸、血液循环、思考问题等活动,用户既可以使用计算机听歌,也可以使用它打印文件,而这些活动完全可以同时进行,这种思想在Java中被称为并发,而将并...

多线程——java线程池简介

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

菜鸟课堂:简介Java多线程开发中的数据同步

关键:yeild()的效果 java内存模型  Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说...
  • wzwdcld
  • wzwdcld
  • 2015年03月21日 22:06
  • 407

我的安卓学习之路--Java多线程--线程简介

在51cto中看到的  自己转过来自己看看http://developer.51cto.com/art/200906/132331.htm 加粗的字体比较重要  ,前面都是原理类型的。 一、线程概...

1. 初学Java多线程:线程简介

本文为Java多线程初学者系列的第一篇,简单介绍了什么是Java的线程及多线程的好处。由于Java是纯面向对象语言,因此,Java的线程模型也是面向对象的。 一、线程概述线程是程序运行的基本执行单元。...

Java之美[从菜鸟到高手演变]之多线程简介

从本篇文章起,我将在Java多线程方面进行深入剖析,这是很大的一部分内容,也是我们作为Java开发者必须要跨过的一道坎儿!因为Java本身就是多线程的语言,想要真正掌握Java,那么请先掌握多线程!文...

java多线程-03-阻塞队列简介

声明 什么是阻塞队列 JDK提供的阻塞队列 1 JDK内置的阻塞队列 2 阻塞队列不可用时的处理方式 使用示例 参考资料 声明该系列文章只是记录本人回顾java多线程编程时候记录的笔记。文中所用语言并...
  • hylexus
  • hylexus
  • 2016年12月04日 03:04
  • 269

Java多线程之线程的简介

操作系统和进程 进程是程序的一次动态执行过程,这个过程也是进程本身从产生发展至消亡的过程。 进程与线程 线程是比进程更小的执行单位,一个进程在其执行过程中可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 多线程简介
举报原因:
原因补充:

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