创建线程有几种不同的方式?
2017-04-20 10:45
337 查看
①继承Thread类(真正意义上的线程类),是Runnable接口的实现。
②实现Runnable接口,并重写里面的run方法。
③使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现。
调用线程的start():启动此线程;调用相应的run()方法
继承于Thread类的线程类,可以直接调用start方法启动线程(使用static也可以实现资源共享).一个线程(对象)只能够执行一次start(),而且不能通过Thread实现类对象的run()去启动一个线程。
实现Runnable接口的类需要再次用Thread类包装后才能调用start方法。(三个Thread对象包装一个类对象,就实现了资源共享)。
线程的使用的话,注意锁和同步的使用。(多线程访问共享资源容易出现线程安全问题)
一般情况下,常见的是第二种。
* Runnable接口有如下好处:
*①避免点继承的局限,一个类可以继承多个接口。
*②适合于资源的共享
/*
* Thread的常用方法:
* 1.start():启动线程并执行相应的run()方法
* 2.run():子线程要执行的代码放入run()方法中
* 3.currentThread():静态的,调取当前的线程
* 4.getName():获取此线程的名字
* 5.setName():设置此线程的名字
* 6.yield():调用此方法的线程释放当前CPU的执行权(很可能自己再次抢到资源)
* 7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,A线程停止执行,直至B线程执行完毕,
* A线程再接着join()之后的代码执行
* 8.isAlive():判断当前线程是否还存活
* 9.sleep(long l):显式的让当前线程睡眠l毫秒 (只能捕获异常,因为父类run方法没有抛异常)
* 10.线程通信(方法在Object类中):wait() notify() notifyAll()
*
*设置线程的优先级(非绝对,只是相对几率大些)
* getPriority():返回线程优先值
* setPriority(int newPriority):改变线程的优先级
*/
链接:https://www.nowcoder.com/questionTerminal/e33c72bceb4343879948342e2b6e3bca?pos=48&mutiTagIds=570&orderByHotValue=1
来源:牛客网
②实现Runnable接口,并重写里面的run方法。
③使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现。
调用线程的start():启动此线程;调用相应的run()方法
继承于Thread类的线程类,可以直接调用start方法启动线程(使用static也可以实现资源共享).一个线程(对象)只能够执行一次start(),而且不能通过Thread实现类对象的run()去启动一个线程。
实现Runnable接口的类需要再次用Thread类包装后才能调用start方法。(三个Thread对象包装一个类对象,就实现了资源共享)。
线程的使用的话,注意锁和同步的使用。(多线程访问共享资源容易出现线程安全问题)
一般情况下,常见的是第二种。
* Runnable接口有如下好处:
*①避免点继承的局限,一个类可以继承多个接口。
*②适合于资源的共享
/*
* Thread的常用方法:
* 1.start():启动线程并执行相应的run()方法
* 2.run():子线程要执行的代码放入run()方法中
* 3.currentThread():静态的,调取当前的线程
* 4.getName():获取此线程的名字
* 5.setName():设置此线程的名字
* 6.yield():调用此方法的线程释放当前CPU的执行权(很可能自己再次抢到资源)
* 7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,A线程停止执行,直至B线程执行完毕,
* A线程再接着join()之后的代码执行
* 8.isAlive():判断当前线程是否还存活
* 9.sleep(long l):显式的让当前线程睡眠l毫秒 (只能捕获异常,因为父类run方法没有抛异常)
* 10.线程通信(方法在Object类中):wait() notify() notifyAll()
*
*设置线程的优先级(非绝对,只是相对几率大些)
* getPriority():返回线程优先值
* setPriority(int newPriority):改变线程的优先级
*/
链接:https://www.nowcoder.com/questionTerminal/e33c72bceb4343879948342e2b6e3bca?pos=48&mutiTagIds=570&orderByHotValue=1
来源:牛客网
相关文章推荐
- cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结
- java多线程之线程创建的几种方式
- 多线程:创建线程的几种方式
- cocos2dx2.x 与cocos2dx3.x创建线程不同方式总结
- 创建线程的几种方式
- 创建线程的几种方式,以及为什么启动线程不用run,而用start方法。
- 多线程NSThread的简单创建和使用——创建线程的几种方式
- 7种创建线程方式,你知道几种?线程系列Thread(一)
- java创建线程的几种方式
- Java创建线程的几种方式
- 创建线程的几种方式
- java多线程与并发之创建线程的几种方式
- C#几种创建线程的方式
- 创建线程的几种方式
- java中创建线程的的几种方式
- Java复习:创建线程的的几种方式
- java 创建线程的几种方式
- 牛客网Java刷题知识点之四种不同的方式创建线程
- 二、创建线程的几种方式
- 线程创建的几种方式