黑马程序员——JAVA多线程编程及syncronized关键字使用

来源:互联网 发布:windows7淘宝 编辑:程序博客网 时间:2024/06/05 20:15

JAVA多线程编程

在java中使用多线程比C++要方便很多。

Thread类是用来实现线程的类,其中的run()方法就是线程在启动之后要执行的程序。

具体实现有两种方式:

一. 继承Thread类来实现多线程

class SubProm extends Thread{     public void run()    {  //线程程序     }}
 这里必须要复写run()方法,不然线程什么都不执行

同时Thread类中构造函数是可以传递String对象的作为线程的名字的,在继承的时候也可以利用这个来创建构造函数

class SubProm extends Thread{    SubProm(String name)    {       super(name);     }     public void run()    {  //线程程序     }}

使用方法:

使用这种方法的时候,只要新建一个子类的对象,然后调用start()方法就可以了

SubProm sub1=new SubProm("线程1");sub1.start();
这样线程就被启动了


二.实现runable接口来实现多线程

class Sub implements Runnable{   public void run(){//程序代码}}

使用方法:

使用这种方式来实现线程需要先创建一个Thread对象然后把实现了接口的对象传递给他

Sub sub1=new Sub();Thread xian1=new Thread(sub1);xian1.start();


JAVA进行多线程编程时,一般使用syncronized来解决共享数据的问题,有两种使用方式。

一. 构建syncronized块

  syncronized块放置在被多线程执行的函数中。

syncronized(object){      functiong();}
 object是一个用来作为锁旗标的对象。可以是任意类型的对象。

  当有一个线程进入这个函数的时候,如果想要执行这个块,就必须要检验一下这个对象,如果没有置锁就可以执行,同时将这个对象置锁。

  当另外有一个线程要访问这个块的时候,也要先检验一下这个锁,如果被其他线程置锁了,就不会进去执行。


二.syncronized函数

  在函数体的前面使用syncronized同样有效。

  

public syncronized void func() {  functiong();} 
  这样整个函数就会变成同步块。

  对于同步函数所使用的锁是谁的问题:

  1.如果函数不是静态的,那么锁计时this

 2.如果函数是静态函数,那么锁就是字节码文件对象,也就是 类名.class





0 0
原创粉丝点击