七、线程

1.         进程和线程

通过下面的案例体会线程的概念:(应用程序中不同的运行分支,有几条运行分支就有几个线程,那么可以通过多线程变成完成系统的并发任务)

/**

 *测试线程的类

 *@authorliuhx

 *

 */

publicclass ThreadDemo01{

    publicstaticvoid main(String args[]){

       MyThread t1 = new MyThread();

       t1.setName("自定义线程1");

       t1.start();

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+"   i==="+i);

       }

    }

}

//线程类

class MyThread extends Thread{

    @Override

    publicvoid run() {

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+" i==="+i);

       }

    }

   

}

2.         Java如何实现线程?

/**

 *测试线程的类

 *@authorliuhx

 *

 */

publicclass ThreadDemo01{

    publicstaticvoid main(String args[]){

        //第三步:创建线程对象

       MyThread t1 = new MyThread();

       t1.setName("自定义线程1");

        //第四步:启动线程start方法,不能使用run方法。(不需要程序员显示的调用run方法)

       t1.start();

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+"   i==="+i);

       }

    }

}

//线程类

//第一步:写线程类,继承Threa的类

class MyThread extends Thread{

    //第二步:重写run方法(线程完成的功能均放入到这个方法中)

    @Override

    publicvoid run() {

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+" i==="+i);

       }

    }

   

}

publicclass ThreadDemo02{

    publicstaticvoid main(String args[]){

       MyThread02 t1 = new MyThread02();

       Thread myt1 = new Thread(t1);

       myt1.setName("自定义线程1");

       myt1.start();

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+"   i==="+i);

       }

    }

}

//线程类

class MyThread02 implements Runnable{

   

    publicvoid run() {

       for(int i=0;i<10;i++){

           System.out.println(Thread.currentThread().getName()+" i==="+i);

       }

    }

   

}

3.         线程的状态?

线程的生命周期,整个生命周期经历那些状态。

新建:MyThread t1 = new MyThread();创建线程对象后,该线程处于新建状态。

就绪状态(可运行状态):当执行完start()方法之后,在抢占cpu之。

运行状态:抢占cpu后,处于运行状态,(这个时候执行run()方法);

阻塞状态(3种阻塞状态)i/0,调用sleep()方法 join() yield()

死亡状态:当运行完run方法后,正常死亡。也可以调用stop方法让其死亡。

4.         控制线程常用的方法有哪些?

调用sleep()方法 join() yield()stop

5.         线程的优先级

6.         线程同步

多线程如果存在共享资源,那么会出现共享资源异常的情况。

为了解决上面的问题,引入了线程的同步机制。

同步机制是利用对象的锁或者类的锁

每一个对象均有一个锁。

Synchronized来实现同步(两种方式)

synchronized(对象){

      同步代码块

 }

 

同步方法:在方法的前面加上synchronized修饰符

publicclass SynchrDemo01 {

 

    /**

     *@paramargs

     */

    publicstaticvoid main(String[] args) {

       ThreadDemo03 tr3=new ThreadDemo03();

        Thread t3=new Thread(tr3);

        Thread t4=new Thread(tr3);

        Thread t5=new Thread(tr3);

        t3.start();

        t4.start();

        t5.start();

 

    }

 

}

 

/**

 *inta=1;

 *a+=i;

 *a-=i;

 *System.out.println(a);

 *

 *多线程共同操作上面几行代码

 *@authordell

 *

 */

class ThreadDemo03 implements Runnable{

 

    Integer a=1;

/*  public synchronized  void run() {

      

       for(int i=0;i<100;i++){

           //int a=1;

           a+=i;

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

           a-=i;

           System.out.println(a);

       }

      

    }*/

   

/**

 *synchronized(对象){

 *   同步代码块

 *}

 *java每一个对象均有对象锁,每一个类有一个类锁。

 *synchronized同步代码块用对象锁。

 *synchronized中用哪个对象的锁呢?

 *  同步代码块中使用了哪个共享对象,我们synchronized选择的是共享对象的锁。

 *

 */

   

   public  void run() {

    synchronized(a){

       for(int i=0;i<1000;i++){

           //int a=1;

           a+=i;

           a-=i;

           System.out.println(a);

       }

    }

      

    }

   

}

 

7.         线程之间通信

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值