疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java面向对象下:多线程编程


 

        多线程编程:

  多任务分为多进程和多线程:

  1、多进程:每一个程序(进程)在内存中各自一块独立的内存地址空间;

  2、多线程:线程是包含在内存中的,每个进程可以分为多个线程,在内存中线程是共享内存地址空间的。

  它们的区别:1、线程是进程内部的一个程序控制流;2、进程独享内存地址空间,线程共享内存地址空间;3、线程的调用开销比进程小,相应的切换成本比进程低。

  gc线程:垃圾回收器(守护线程)。

  线程状态(生命周期):

  1、新建;new出Thread对象

  2、就绪;调用start方法

  3、运行;运行run方法

  中断:没有得到CPU的执行

  (1)、没有抢占到CPU;线程优先级:1到10级,默认5级,10级最高setPriorty()可以设定线程的优先级,getPriorty()可以获得线程优先级

  (2)、等待输入输出;阻塞,I/O事件

  (3)、睡眠休眠;sleep()到点后醒来加入抢占CPU的执行,不是醒来后立即执行。

  (4)、等待;wait()

  (5)、挂起;yield()

  4、死亡。run方法结束

  线程的创建:

  1、thread类:

  (1)、编写一个继承Thread类的子类;

  (2)、重写从父类继承的run方法;

  (3)、创建Thread子类类的实例;

  (4)、调用这个子类的start方法。(如果调用run方法则是普通调用,不会新建线程。)

  2、Runnable接口:(这种更加符合面向对象)

  (1)、创建一个类来实现Runnable接口;

  (2)、在Runnable指定的run方法内放入想要在线程中执行的代码;

  (3)、创建一个Runnable类的实例;

  (4)、创建一个Thread对象,将Runnable类的实例作为构造参数传进去;

  (5)、调用Thread类的start方法开始执行线程。

  线程同步Synchronized关键字修饰符:

  同步块:定义在调用者上,更灵活。

  Synchronized (取得锁的对象){

  要锁定的代码

  }

  同步方法:定义在资源上,更安全。

  在方法名前加Synchronized关键字修饰符。

  同步之后也许会产生死锁,产生死锁后的解决方案是:线程通讯。

  线程之间的相互通讯:

  wait()、notify()、notifyAll()用于线程间的通讯,只能写在同步方法或同步块中。

  wait():让使用对象的线程停止运行;

  notify():唤醒第一个等待的对象;

  notifyAll():唤醒所有等待对象,让它们开始竞争CPU。