黑马程序员Java培训和Android培训:多线程

 

Thread.currentThread().getName()

 

同步代码块

同步函数

代码块和函数的同步

 

函数是通过this来做标志位的选择

 

死锁

 

线程间的通信的问题。

wait()

notify()

notify All

 

怎么样控制其生命周期

 

实现多线程的2种方式:1.从Thread类继承 2.实现Runnable的接口

一般推荐使用第二种方法

 

 

 static Thread  currentThread()方法  可以获取当前正在执行的线程

getName( ) 得到线程的名字  这个方法是从Thread类中继承而来

要新建立一个线程,必须建立Thread的一个派生类,派生类中重写 run的方法,线程的代码放在run方法中

新建立了一个线程的实例 要想启动这个线程 必须用start()方法 启动了start方法  JVM会自动run方法

 

SetDaemon(true/false)设置后台线程  而且必须在Start()之前就必须调用

static void yield() 可以让一个线程暂停,让其他线程执行

getPriority()  得到线程的优先级

setPriority(参数)   设置线程的优先级  参数可为: static int MAX_PRIORITY  用表示10

                                              static int MIN_PRIORITY  用表示 1

                                            static int NORM_PRIORITY  用5表示

 

一个内部类来继承Thread方法

package Test;

public class machine

{

    public static void main(String [] args)

    {

       MyThread pa=new MyThread();

       pa.getInner().start();

       System.out.println("thr Thread name is:"+Thread.currentThread().getName());

    }

}

 

class MyThread

{

private    class InnerThread extends Thread

    {

        public void run()

           {

              System.out.println(Thread.currentThread().getName());

          

           }

    }

 

Thread getInner()

{

    return new InnerThread();

}

 

}

 

 

用实现Runnable的方法如下

package Test;

public class machine

{

    public static void main(String [] args)

    {

       MyThread pa=new MyThread();

    new Thread(pa).start();

       System.out.println("the Thread name is:"+Thread.currentThread().getName());

    }

}

 

class MyThread implements Runnable

{  

 

        public void run()

           {

              System.out.println("the thread name is "+Thread.currentThread().getName());

            

           }

   

 

 

}

 

 

同步的两种方式:1同步块 2 同步方法

每一个对象都监视器 或者叫锁   同步块的实现模式

同步的方法是利用this所代表对象的锁     同步方法的实现模式

每个class也有一个锁,是这个class对象的Class对象的锁  抽象的类的同步实现

 

练习  火车票售票系统

 

 

package Test;

public class machine

{

public static void main(String [] args)

{

    sellThread p= new sellThread();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

   

}

}

class sellThread implements Runnable

{ int ticket=100;

Object obj= new Object();

    public  void run()

    {

       while(true)

       {

          

      

       synchronized(obj)

       {

    if(ticket>0)

    {

       System.out.println(Thread.currentThread().getName()+"sell the "+ticket);

       ticket--;

    }

      

    }

      

    }

    }

 

}

 

解决死锁问题用到的函数

 

wait( )   notify()   notifyAll() 这个3个方法是Object中的方法  不是Thread中的方法 ,而且只能在同步方法或者同步块中调用

这三个函数主要用于producer-consumer关系

线程的终止: 设置flag变量 结合 interrupt()方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值