Java 线程学习总结

来源:互联网 发布:高一物理优化设计答案 编辑:程序博客网 时间:2024/05/17 15:57

1.进程和线程的概念

进程:是程序一次动态的执行过程,它经历了代码加载,执行,执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。

线程:是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在,同时运行,形成多条执行线索。一个进程可能同时包含了多个同时执行的线程。

2.进程和线程的区别

1)同样作为基本的执行单位,线程是划分的比进程更小的执行单位。

2)每个进程都有一段专用的内存区域,与此相反,线程却共享内存单元(包含代码和数据),通过共享的内存单元来实现数据的交换、实时通信、与必要的同步操作。

3.线程的实现方式

1)继承Thread类

2)实现Runnable接口

实现Runnable接口相对于继承Thread类来说有,有下列优点:

1)适合多个相同程序的代码去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效的分离、较好的体现面向对象设计的思想。

2)可以避免由于JAVA的单继承特性带来的局限。即要将某个已经继承父类放入多线程中时,由于一个类不同时拥有两个父类,所以不能用继承Thread类的方式,那么就只能采用实现Runnable接口的方式了。

3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个执行线程的代码来自同一个类的实例时,即称它们共享相同的代码。多个线程可以操作相同的数据,与它们的代码无关。当共享访问相同的对象时,即共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传进去,这个接口就实现了Runnble接口的类例。

4.线程的状态

ThreadStatus

新建:Thread thread = new Thread();

就绪:调用start()方法后,就处于就绪状态。

运行:当就绪的线程获得处理器资源时,就处于运行状态。此时自动调用该线程对象的run()方法。

堵塞:一个正在执行的线程在某种特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。如果调用sleep()、suspend()、wait()方法时,线程将进入堵塞状态。

死亡:线程调用stop()方法或者run()方法结束后。就进入死亡状态。处于死亡的线程不具有继续运行的能力。

5.线程操作的一些方法

声明一个线程对象:

public ThreadDemo extents Runnable{}

ThreadDemo t = new ThreadDemo();

获取进程名字String name = t.getName();

设置进程名字t.setName();

判断进程是否是活动状态t.isLive();

设置后台进程t.setDaemon(true);

设置进程强制制行t.join();

设置进程休眠Thread.sleep(60000);

中断进程t.interrupt();

6.多线程的同步

同步代码块:

synchnorized(对象)

    需要同步的代码;

同步方法:

public synchnorized void method(参数)

   代码;

7.线程间的通讯

通过代码控制,用wait()方法告诉当前线程放弃监视器进入睡眠状态,直到其它线程进入同一监视器并调用notify()为止。

notify()唤醒同一对象监视器中调用wait()的第一个线程。

notifyAll()唤醒同一对象监视器中调用wait()的所有线程,具有最高优先级的线程首先被唤醒执行。

8.线程生命周期的控制

通过控制run()方法中循环条件的方式来结束一个线程的方法是推荐使用的,这也是实际中用的最多的方法。

 

原创粉丝点击