1.进程和线程
进程:独立的CPU 占用时间,独立的内存占用空间。一个进程可以装载多个线程
线程:位于进程中,是进程中的一条链,多线程可以并发执行。
进程是一次核算,线程就像开的多个通道,可以提高软件的执行效率。
- 线程
2.1 线程 首先要创建类,这个类要继承(extends)Thread,然后重写run()方法,然后创建实列,对象名.start();开始执行线程。注意:mian 函数要看做是一个默认的主线程。
public class MytextThread {
public static void main(String []args)
{
TextThread t1=new TextThread(100);
TextThread t2=new TextThread(1000);
t1.start();
t2.start();
System.out.println("main线程");
}
}
class TextThread extends Thread{
private int count;
TextThread(int count)
{
this.count=count;
}
public void run()
{
int x=0;
for(int i=0;i<=count;++i)
x+=i;
try
{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println("运算结果:"+x);
}
}
2.2 使用多线程售票肯能会出现一票两卖,卖出负数的票,原因:当线程执行操作时并没有同步到其他的
synchronized 同步锁,就是不允许在我没销售完,你去销售。
有同不代码块
- CountDownLatch
4.线程的生命周期
线程的存在状态:
Born(新建) TextThread t=new TextThread(100);
ready(就绪) start() 方法被调用就进入状态
running(运行) run 方法进入运行状态
sleep(睡眠) 线程在运行时可以让其睡眠一会。 线程对象可以直接调用sleep来让线程进入睡眠状态
waiting (等待) 有一个方法叫wait 等着别人呼叫再起来.
suspended (挂起) 临时停止中断线程的执行时就是挂起//不建议使用了
Resume(恢复) 恢复可以恢复挂起状态 //不建议使用了
Blocked(阻塞) 阻塞状态 就是线程等待一个事件或者一个东西被别人释放的时候才能进行。
dead(死亡) run方法执行完成或 调用stop停止.这个线程就处于死亡状态了
能操作的 sleep 睡眠(时间) wait 等待 yield 让线程让出控制权 isAlive 查看线程是否在存活状态。
getState 获取当前线程的状态 setPriority 设置线程优先级1-10 10优先级最大