java线程精华(全).doc

java线程精华(全).doc

ID:32020304

大小:282.50 KB

页数:47页

时间:2019-01-30

java线程精华(全).doc_第1页
java线程精华(全).doc_第2页
java线程精华(全).doc_第3页
java线程精华(全).doc_第4页
java线程精华(全).doc_第5页
资源描述:

《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)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。