欢迎来到天天文库
浏览记录
ID:32020304
大小:282.50 KB
页数:47页
时间:2019-01-30
《java线程精华(全).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java线程大全文章分类:Java编程 1 何为线程可以把一个线程想象成流水线,多线程就是为了多个流水线同时工作(同时下载多个文件),也可以不把不同的事务分发到不同的流水线上(一边下载(到缓存),一边保存(缓存保存到磁盘))。 以下载文件为例,l 单线程下载三个文件如下图,必须文件1下载完成后才能下载文件2。 l 多线程下载三个文件情况如下图,三个文件同时开始下载。 l 多线程下载一个文件情况如下图,将下载一个文件分为下载线程和保存线程,两个线程以缓冲区作为中介,这是典型的生产者-消费者模式。2 启动和结束线程2.1 启动线程在Java中实现线程有两种方法:2.1
2、.1 继承Thread,重写 void run() 方法Java代码1.Thread thread = new Thread("ThreadName") 2.{ 3. public void run() 1. { 2. // do something here 3. } 4.}; 5. thread.start(); Threadthread=newThread("ThreadName"){publicvoidrun(){//dosomethinghere}};thread
3、.start(); 上述代码首先创建了继承Thread,并覆盖run方法的匿名类。然后创建一名为"ThreadName"的线程,线程启动后会执行run()方法,run()返回后线程随即销毁。Tip:给线程起个名字是很好的实践,这里给线程起名为"ThreadName",实际代码应该根据业务含义取名称,这对查看日志和调试都有很大的用处。 2.1.2 实现 Runnable 接口,放到Thread中执行Java代码1.Runnable runnable = new Runnable() 2.{ 3. public void run() 4.
4、 { 5. // 线程中执行的代码 6. } 7.}; 8. 9.Thread thread = new Thread(runnable, "ThreadName"); 10.thread.start(); // 启动线程 Runnablerunnable=newRunnable(){publicvoidrun(){//线程中执行的代码}};Threadthread=newThread(runnable,"ThreadName");thread.start();//启动线程 上述代码首先创建了实现Runnable接口的匿名类,然
5、后将匿名类的对象放入Thread中执行。2.2 结束线程当run()方法结束后(return或抛出异常)线程随之结束。线程的一些特性:· 所有的Java代码都是在某个线程中执行的,所以在任一行Java代码中使用Thread.currentThread()都可以得到当前运行线程。 · JVM允许多个线程并发执行,虽然同一时刻只能有一个线程占用CPU,但每个线程占有的时间片非常短,所以人类的感官上多个线程是并发执行的。 · 当 JVM启动时,至少有一个用户线程运行,即执行某个类的main方法的线程。 2.3 线程生命周期l 可运行态(Runnable) start()
6、被调用后,线程进入可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个CPU的PC而言,任何时刻只能有一个处于可运行态的线程占用CPU。l 非运行态(Not Runnable) 当以下事件发生时,线程进入非运行态:A. suspend()方法被调用;B. sleep()方法被调用; C. wait()方法被调用; D. 线程处于I/O等待。l 死亡态(Dead) 当run()方法结束,线程进入死亡态 。 2.4 守护线程有一种线程叫守护线程,和普通线程唯一的区别就是在线程启动前调用了线程对象的setDaemon(true)函数
7、,如下面代码示例。 Java代码1.Thread thread = new Thread("ThreadName") 2.{ 3. public void run() 4. { 5. // 线程中执行的代码 6. } 7.}; 8.thread.setDaemon(true); 9.thread.start(); // 启动线程 Threadthread=newThread("ThreadName"){publicvoidrun(){//线程中执行的代码}};thread.setDaemon(true)
此文档下载收益归作者所有