今天学习了java语言中关于线程这部分的一些知识,下面对学习的知识进行一些简单的总结:
1.首先需要弄清楚线程的概念
线程是操作系统级别的概念,是CPU的基本使用单元。一个线程由线程ID,程序计数器,寄存器和堆栈组成。很多时候也把线程叫做轻量级的进程。
2.线程与进程的区别
一个进程可以是由多个线程组成的,可以这样来理解,一个进程就是一个软件,而线程就是该软件的多个功能,多个功能之间进行协作完成该软件要完成的任务。特别要注意的是,进程占据一片单独的存储空间,一个线程是没有独自的存储空间的,是跟该线程所在进程的多个线程共享存储空间。
3.Java中实现线程的方法
方法有两种:
<1>继承Thread类:
1.定义一个类,继承Thread 2.重写Thread类中的run方法 3.对象调用start()方法
<2>实现Runnable接口
1.定义一个类,实现Runnable接口 2.重写接口下的run方法 3.定义一个Thread对象,将该对象传进去,调用start方法
这里要注意一点,线程在启动时,跟普通的函数调用不同,并不是直接用线程调用run()方法,而是线程单独调用start()方法。
4.线程的几个状态
1.新建状态:就是通过new在内存中新建一个线程对象,但此时线程并未启动。
2.就绪状态:当线程调用了start方法后,该线程就进入了就绪状态,但此时线程需要等待CPU时间片,只有获取了CPU时间片,线程才能执行。
3.运行状态:在就绪的情况下获取到了CPU时间片,线程开始执行多线程代码,当该CPU时间片用完,操作系统会给其他线程运行机会。
4.阻塞状态:线程无法执行,必须满足某种外部条件时才能执行。
5.死亡状态:线程退出run()方法就处于死亡状态了。需要注意的是:导致线程死亡的唯一因素就是线程执行完run()方法返回。
5.线程的安全问题
1.线程的协作,可以参看下面代码:
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
Thread1 th1 = new Thread1();
th1.start();
System.out.println("还是可以做其他的事情!");
try{
th1.join();
}catch(Exception ex){
}
System.out.println("结果是:" + sum);
}