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

多线程1

时间:2015-04-23 10:57:49      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:线程

多线程:
1.在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,使得线程间的通信较进程简单。
具体到java内存模型,由于Java被设计为跨平台的语言,在内存管理上,显然要有一个统一的模型。系统存在一个主内村,Java中所有变量都储存在主内存中,对于所有的线程都是共享的。每条线程都有自己的工作内存。

Main Memory(主内存)-->Working Memory(工作内存)-->保存的是主存中某些变量的拷贝-->线程之间无法相互直接访问-->变量传递通过主存完成


java.lang.Thread:面向对象的语言-->控制线程

Thread类最重要的方法是run(),它为Thread类的方法start()所调用,提供线程所要执行的代码,覆盖run();
实现方法:
1.expend Thread类,重写run();
2.实现Runnable接口,提供run()方法,由于Runnable接口没有任何对线程的支持,必须创建Thread类的实例,通过Thread类的构造函数public Thread(Runnable target)来实现;
(Runnable 接口实现多线程使得我们能够在一个类中包含所有代码,有利于封装)
四种状态:
1.新状态:也被创建尚未执行(start()尚未被调用);
2.可执行状态:CPU时间随时可能被分配给该线程,从而使得它执行;
3.阻塞状态:不会被分配CPU时间,无法执行;可能阻塞于I/O,或者阻塞于同步锁;
4.死亡状态:正常情况下run()返回使得线程死亡。stop()destory()亦有同样的效果,不推荐,stop会产生异常,destory强制终止,不会释放锁。
线程优先级:CPU时间
线程同步:synchronized方法和块
线程的阻塞:暂停一个线程的执行以等待某个条件发生。
1.sleep()方法:sleep()使得线程在指定的时间内进入阻塞状态,不能得到CPU时间,指定的时间一过,线程重新进入可执行状态。
2.suspend()resume():用在等待另一个线程产生的结果的情形;测试发现结果还没有产生后,suspend()让线程阻塞,另一个线程产生结果后,调用resume()恢复。
3.yield():效果等价于调度程序认为该线程已经执行了足够的时间从而转到另一个线程。
4.wait()和notigy()方法:wait阻塞释放锁,调用notify()随机选取因为wait()方法阻塞的线程-->在synchronized方法或块中才可以用

线程池管理器(ThreadPoolManager):用于创建并管理线程池
工作线程(WorkThread):线程池中线程
任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。

任务队列:用于存放没有处理的任务。提供一种缓冲机制。


简单用例:

public class MyThread implements Runnable{
	int count = 1,number;
	public MyThread(int num){
		number = num;
		System.out.println("创建线程:"+number);	
	}
	public void run(){ //实现run方法
		while(true){
			System.out.println("线程:"+number+" 计数:"+count);
			if(++count==6){
				return;
			}
		}
	}
	public static void main(String[] args) {
		for(int i=0;i<5;i++){
			new Thread(new MyThread(i+1)).start();
		}
	}

}



多线程1

标签:线程

原文地址:http://blog.csdn.net/u011513323/article/details/45218095

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