码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程编程

时间:2015-04-15 19:44:52      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:java多线程

1、多线程概述

当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。主要以下几个优点:

  • 线程之间很容易实现共享内存
  • 创建线程代价较小
  • Java语言内置多线程功能支持
2、线程的创建和启动

所有的线程对象都是Thread类或其子类的对象,每一个线程完成一定的任务。

Java定义了两种创建线程的方法:

方法一:继承Thread类创建线程类

?  定义Thread的子类,并重写run方法

?  创建Thread子类的实例,即创建了线程对象

?  用线程对象的start方法来启动该线程


public class DemoThread extends Thread
{
	private int i;
	String name;
	public DemoThread(String name)
	{
		super(name);
	}
	public void run()
	{
		for(;i<100;i++)
		System.out.println(Thread.currentThread().getName()+"-------"+i);
		
	}
	public static void main(String[] args)
	{
		for(int i=0;i<100;i++)
		{
			System.out.println(Thread.currentThread().getName()+"-----------"+i);
		
			if(i==20)
			{
				new DemoThread("windows1").start();
				new DemoThread("windows2").start();
			}
		}
	}
}

方法二:实现Runnable接口创建线程类

?  定义Runnable接口的实现类,并重写该接口的run方法(该方法是该线程的线程执行体)

?  创建Runnable实现类的实例,并以此实例作为Thread的target来创建Tread对象

 

public class DemoThread implements Runnable
{
	private int i;
	public void run()
	{
		for(;i<100;i++)
		System.out.println(Thread.currentThread().getName()+"-------"+i);
		
	}
	public static void main(String[] args)
	{
		for(int i=0;i<100;i++)
		{
			System.out.println(Thread.currentThread().getName()+"-----------"+i);
		
			if(i==20)
			{
				DemoThread t=new DemoThread();
				new Thread(t,"Windows1").start();
				new Thread(t,"Windows2").start();
			}
		}
	}
}

两种方法比较:

  1. 采用实现Runnable接口方式的线程还可以继承其他类,而继承Tread类后不能再继承其他父类。
  2. 实现Runnable接口方式的线程可以共享一个target对象,适合多个相同线程来处理同一份资源的情况
  3. 若需要访问当前线程,实现Runnable接口方式只能使用Thread.currentThread()方法,而继承Thread可直接使用this即获取当前线程。

3、线程的生命周期

线程被创建并启动以后要经历五种状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。

新建:使用关键字new创建一个线程后,处于新建状态,此时仅由虚拟机为其分配内存并初始化成员变量,程序不会执行线程执行体。
就绪:当线程对象调用start()方法后,该线程处于就绪状态,虚拟机为其创建调用栈和程序计数器,但是此时线程并没有运行,只是表示线程可以运行了。
运行:当处于就绪状态的线程获得了CPU,开始执行run方法,则该线程处于运行状态。
阻塞:当发生线程调用sleep方法、阻塞式IO方法、suspend方法、等待通知(notify),线程将近阻塞状态。阻塞状态在合适的时候会重新进入就绪状态。
死亡:线程会以以下三种方式结束,然后就处于死亡状态,run方法执行完成、线程抛出未捕获的异常、直接跳跃stop方法结束进程。

Java多线程编程

标签:java多线程

原文地址:http://blog.csdn.net/xujian_2014/article/details/45061893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!