黑马程序员----多线程

来源:互联网 发布:查看oracle端口号 编辑:程序博客网 时间:2024/06/18 18:23

android培训、java培训、期待与您交流! ----------------------Java Thread:是通过java.lang.thread

public class Thread
extends Object
implements Runnable

runnable

方法调用

线程启动

只要能使用thread接口就不要从Thread继承

线程状态:

节点流类型:

 

 

两种方式创建新的线程:

第一种:

定义线程类实现‘Runnable接口

Thread myThread = new Thread (target)//targetRunnable接口类型

Runnable中只有一个方法:

  public void run () //定义线程运行体

使用Runnable接口可以为多个线程提供共享的数据

实现Runnable接口的类的run方法定义中可以使用Thread的静态方法

 Public static Thread currentThread()  获取当前线程的引用

 

第二种:

可以定义一个Thread的子类并重写其run方法

class MyThread extends Thread{

public void run (){

…………………

}

}

 然后生成该类的对象

MyThread mythread = new MyThread(….)

Main方法 run方法

对象的多态性

 thread类创建线程

1要将一段代码在一个新的线程上运行,该代码应该在一个类的run函数中,并且run函数所在的类是Thread类的子类。倒过来看,我们要实现多线程,必须编写一个继承了Thread类的子类,子类要覆盖thread中的run函数,. 在子类的 run函数中调用想在新线程上运行的程序代码

2启动一个新的线程,我们不是直接调用thread的子类对象的run方法,而是调用Thread子类对象的Start(从Thread类的继承到的)方法,thread类对象的start方法将产生一个新的线程,并再该线程上运行该Thread类对象的中的run方法。根据面向对象的运行时的多态性,在线程上实际运行的是thread子类(也就是我们写的那个类)对象中的run方法

3由于线程的代码在run方法中,那么方法执行完成以后线程也就相应的结束。因而我们可以通过控制run方法中循环的条件来控制线程的结束

 

 

runnable接口创建多个线程

 

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

 

可以避免由于java的单继承特性带来的局限。

当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的实例。

 事实上几乎所有多线程应用都可以用Runnable接口方式

synchronized()作用,原理

synchronized()后面必须加上一个对象

 某个方法后中加入Synchronized后,

多线程在实际中的应用

1:火车票售票系统的解析:

2:网络聊天程序的收发:

 

同步函数或同步代码块也可以实现同步

一个类的多个方法中加入synchronized

监视器,怎样建一个同步监视器

 

多线程同步的问题:

什么是线程安全,同步代码块,同步函数,代码和函数间的同步,死锁问题

 

线程间的通信:

wait告诉当前线程放弃监视器并进入睡眠状态直到其他线程进入同一个监视器调用notify为止。

 notify:唤醒同一对象监视器中调用wait的第一线程。用于类似饭馆有一个座位后,通知所有等候就餐的顾客中的第一位可以入坐的情况

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

 

线程生命的控制:android培训、java培训、期待与您交流! ----------------------

原创粉丝点击