初识多线程
来源:互联网 发布:mac玲珑加速器装不进去 编辑:程序博客网 时间:2024/05/16 18:26
多线程的意义:在单线程中,程序代码按调用顺序依次往下执行,如果需要一个进程同时完成多段代码的操作,就需要产生多线程。
实现线程的两种方式
一:继承Thread类
public class ThreadTest extends Thread{}
完成线程功能的代码在run()中,当一个类继承Thread就可以重写它的run()方法,将实现该线程功能的代码写入run()中,然后调用Thread类的start()方法(通过start()去调用run()而不是直接调用)执行线程。
public static void main(String[] args){ new ThreadTest().start();}
如不调用start(),线程永远都不会启动,调用start()之前,Thread对象只是一个实例,而不是一个真正的线程。
如果strat()调用一个已经启动的线程,系统将抛出IllegalThreadStateException异常。
二:实现Runnable接口
如果要继承其他类(非Thread类),又要使用多线程,那么通过Runnable接口来实现。因为Java不支持多继承。
public class ThreadTest2 extends T implements Runnable
但通常情况下,使用的是内部类的形式:根据Runnable对象创建Thread对象。
Thread t=new Thread(new Runnable(){ public void run(){ // }});
然后再调用start()启动线程
t.strat();//启动线程
线程的生命周期
7种状态:出生、就绪、运行、等待、休眠、阻塞、死亡。
run()执行完,线程结束(死亡)
操作线程的方法
一:线程的休眠
调用sleep(),它通常是在run()方法内的循环中被使用
try{ Thread.sleep(2000);//休眠2秒,2秒后进入就绪状态}catch(Exception e){//由于sleep()方法的执行可能抛出InterrupedException异常 e.printStackTrace();}
使用了sleep()的线程在一段时间后会醒来,但不能保证它醒来后进入运行状态,只能保证进入就绪状态。
二:线程的加入
调用join()。假如有一个线程threadA在执行,这时候要加入线程threadB,可以怎么做?在threadA的run()方法中调用threadB.join(),这时候threadA暂停且等待线程threadB执行完再执行。
三:线程的中断
在以前,会使用stop()方法中断一个线程,但是新的jdk版本已经停用了这个方法。现在常用的方法是设置一个变量boolean isContinue=false,在run()方法的while循环中加入一个判断
if(isContinue){ break;}
再写一个setContinue()方法
public void setContinue(){ isContinue=true;}
当要中断一个线程时,调用setContinue()。
又或者:如果某个线程使用了sleep()或wait()方法进入了就绪状态,可以使用Thread类中interrupt(),此时会抛出InterrptedException异常,我们就可以在处理异常catch时中断线程break。如:
try{ thread.sleep(1000);}catch(Exception e){ break;}--------省略其他代码------------thread.interrupt();
需要注意的是,调用interrupt()并不能终止线程,因为它只是改变标识变量的值。更多http://www.importnew.com/17027.html
四:线程的同步
因为一个进程的不同线程经常是共享资源的,这就会造成资源抢占,且因为对资源的检测不及时,而导致资源的分配出现问题。synchronized关键字可用于资源的同步,实际上就是对线程共享的资源加上一个安全锁,每次对资源的检测完成后,新的线程才可以访问资源。synchronized的两种使用方法:
//同步块synchronized(Object){}//同步方法public synchronized void method(){}
- 初识多线程
- 初识多线程
- 初识多线程
- 初识多线程
- 初识多线程
- 初识多线程
- 初识多线程
- 多线程(一):初识多线程
- Java多线程初识
- 初识python多线程
- 初识多线程单线程
- 多线程——初识
- 初识Java多线程
- 初识Java多线程
- 初识Java多线程编程
- 初识多线程同步问题
- 初识多线程 (其二)
- Linux的多线程--初识
- Oracle基础知识(二十二)
- git工作流程
- Firefox浏览器实现书签栏只在空白页显示
- 2017 GCTF writeup
- 从零开始构建部署上线Node.js+Express+Bootstrap+Jade响应式网站应用—RSPT丨留学生活第一站(四)
- 初识多线程
- Redis学习笔记1--入门篇
- iOS开发系列--视图切换
- 不容易系列之二 HDU
- oracle中REF Cursor用法
- leetcode -- Unique Binary Search Trees
- Datatable报错Uncaught TypeError: Cannot read property 'style' of undefined
- 使用JS写一个计算器练习
- iOS SAX 、DOM 、XML解析区别笔记