java多线程学习笔记

来源:互联网 发布:数据恢复软件比较 编辑:程序博客网 时间:2024/04/30 02:58

最近在复习java,刚好看到java多线程,所以就把自己学习的一些心得写下来,保存,方便以后自己再看一:

在java中,线程分成两类:用户线程和守护线程

先来说说用户线程:运行在前台。执行具体的任务程序的主线程,连接网络的子线程等都是用户线程

用户线程的实现方式有两种方法:1.继承Thread类,2.实现Runnable方法。

请看如下示例代码:

继承Thread类实现多线程:

package com.test;public class ThreadTestDemo extends Thread{@Overridepublic void run(){while(true){                   /**                    *可以在run方法中实现自己的逻辑                    **/                   System.out.println("通过继承Thread方法实现多线程");}}    public static void main(String[] args) {    ThreadTestDemo threadTestDemo = new ThreadTestDemo();//创建线程    threadTestDemo.start();//实现线程}}
实现Runnable接口:

package com.test;public class RunnableTestDemo implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stub/** * 在这里实现自己的逻辑 */while (true){System.out.println("通过实现Runnable方法实现多线程");}}   public static void main(String[] args) {RunnableTestDemo runnableTestDemo = new RunnableTestDemo();Thread thread = new Thread(runnableTestDemo);//创建线程thread.start();//实现线程}}
上述代码就是两种实现多线程的方法,上述代码的共同点就是都要new一个Thread对象,然后调用start()方法。

不同点

1:就是Runnable方式可以避免Thread方式由于java单继承特性带来的缺陷
2:Runnable的代码可以被多个线程(Thread实例)共享适合于多个线程处理同一资源的情况

建议:一般情况下使用实现Runnable接口的方式

二:

线程的生命周期

如上图所示:线程的整个生命周期,创建一个线程,通过调用start()方法,让线程进入就绪状态,获取到CPU的命令后进入运行状态,如果有阻塞时间或者命令,就进入阻塞状态,阻塞状态解除以后,重新进入就绪状态获取CPU指令,或者直接线程终止。

守护线程:运行在后台。为其他的前台线程服务

特点:一旦所有用户线程都结束运行,守护线程随JVM一起结束工作
应用:数据库连接池的检测线程,jvm虚拟机启动后的监测线程
最常见的守护线程:垃圾回收线程
如何设置守护线程:通过调用Thread类的setDaemon(true)方法来设置当前的线程为守护线程
注意事项:setDaemon(true)方法必须在start()方法之前调用,否则会抛出IllegalThreadStateException异常
2:在守护线程中产生的新线程也是守护线程
3:不是所有的任务都可以分配给守护线程来执行,比如读写操作,或者逻辑计算

0 0
原创粉丝点击