单线程:在java中,真正的单线程是不存在的。以前我们编写的程序,至少在后台有一个垃圾回收线程存在,这个后台线程在整个程序的运行中一直存在,它会在需要的时候启动。
通常所说的单线程是指从表面上看,没有使用多线程的编码机制,只有一个main方法在运行。
多线程机制:java中支持多线程,
它支持一个任务分为几部分(每一部分称为一个程序执行流,一条执行路线),
使用多线程机制会极大提高效率,
一条线程出现阻碍,不影响其他线程的执行;
数据或代码的共享,即共享资源
线程对象的构造:
1、 继承java.lang.Thread类,
2、 让接口Runnable的实现类作Thread类的参数,构造一个线程对象
线程的启动方式:start()方法
调用此方法从概念上说不是执行线程中的代码。
线程执行哪些代码?
它要执行run()方法中的代码。一个线程对象肯定要重写run()方法,因为父类中的run()是空实现,接口Runnable中的run()方法没有实现。
线程三要素是哪些?
1、 CPU,程序无法控制cpu,因为它是由操作系统控制和调度的;
2、 代码
3、 数据
三者中,程序员可控的只有代码和数据;
根据代码和数据是否共享,可分为四种情况:
1、 代码和数据都共享;
a) 火车售票系统
2、 代码和数据都不共享
a) 线程A有自己的代码,如加法运算;线程B同样也有自己的代码,作减法运算。
3、 代码共享,数据不共享
a) 如果数据是属于实例的,每个线程对象都有自己的一份实例数据,但方法共享;
4、 数据共享,代码不共享
a) 上传文件和下载文件
同步概念:
程序的安全性
安全性体现在当一个线程对象修改数据时,其他的线程对象都不能执行;
线程状态图:
正常状态四种,分别是:
1、 新建状态(new),构造一个线程对象;
2、 可运行状态(runable),新建的线程对象通过调用start()方法,进入可运行状态,
3、 运行状态(running),经过Cpu的调用(在多个线程对象中,cpu选中了这个线程对象),进入运行状态,执行run()方法中的代码;
4、 死亡状态(dead),线程中的代码正常运行完毕,线程消亡。
线程类提供一个有用的方法:
Sleep(int times);停顿若干毫秒的时间。
常用的场合为倒计时。