您的位置:首页 > 编程语言 > Java开发

java多线程学习笔记

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


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

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

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

请看如下示例代码:

继承Thread类实现多线程:

package com.test;

public class ThreadTestDemo extends Thread{
@Override
public 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{

@Override
public 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:不是所有的任务都可以分配给守护线程来执行,比如读写操作,或者逻辑计算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: