java中的线程

线程

一、多线程的概念

是指程序包含两条或者两条以上并发运行的部分,程序中每个这样的部分都叫一个线程(thread)每个线程都有独立的执行路径。因此多线程是多任务处理的一种特殊形式。

优点:在于取消了主循环|轮询机制。一个线程可以暂停而不影响程序其他部分。

二、线程分为四种状态

1、new(新生)

2、Runnable(可运行)

3、Blocked(被阻塞)

4、Dead(死亡)

⑴新生:当线程被创建的时候,线程还没开始运行,此时线程处在新生的状态。当一个线程处在新生状态时候,程序还没开始运行线程中的代码。

⑵可运行线程:

当线程调用Start()方法时,该线程九可以运行了

⑶被阻塞线程:

在线程运行的中可能因为一些原因而进入被阻塞状态。

①线程通过调用sleep()方法进入睡眠状态

②线程调用了一个在IO上被阻塞的操作,在这个操作完成之前不会返回它的调用者,也就是这个方法不会return.

③线程在等待某个特定的触发条件

⑷死亡线程

有两个原因会导致线程死亡

①因为run方法正常退出而导致线程死亡

②因为一个未被捕获的异常终止了当前线程的正常运行

四、创建线程(一)

主线程:当java运用启动时,一个线程立刻运行,该线程通常叫做程序主线程。它是程序开始时候执行的。重要性体现在两个方面

1、它是产生其他子线程的线程

2、通常它必须最后完成执行,因为它执行各种关闭动作

五、创建线程(二)

创建线程,java定义了两种方式

1实现Runnable接口

创建了实现Runnable接口类以后,需要在测试类内部实例化一个Thread类对象,调用start()方法才能启动线程。

Eg:public class TH02 implements Runnable{


    @Override

    public void run() {

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

     

        System.out.println("第"+i+"个人");

    }


    }

    }

测试类代码

Public static  void main(String[]args){

Runnable fu=new TH02();

    Thread  mj=new Thread(fu);

    mj.start();

}

2继承Thread类

继承Thread类,需要重写run方法,必须调用start方法启用线程。



Eg:

public class TH01 extends Thread {

    public void  run(){

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

            System.out.println("第"+i+"个小狗");

        }

    }

}

测试类

public static void main(String[] args) {

        TH01 fr=new TH01();

        fr.start();

        String na=fr.getName();

        System.out.println(na);

        System.out.println(fr.getPriority());

  }


五、线程同步


概念:当两个或者两个以上的线程共享资源,他们需要某种方法来确定在某一时刻,仅被一个线程占用,这种方法称为同步。(synchronization)。


使用方法:用关键字synchronized修饰,可以直接修饰需同步的方法,也可以在调用出修饰调用的代码块。


eg:两个窗口一共售火车票10张,旅客自愿选择窗口一还是窗口二买票。


代码:

1、实现线程

public class Buytraintickets  implements Runnable {

     private String Buyplace;

     private int num=10;

     

    @Override

    public synchronized void run() {

        if(num>0){

            num--;

            System.out.println(Thread.currentThread().getName()+"买1张票"+"还剩"+num+"张票");

        }

        

        

    }


    public Buytraintickets(String buyplace) {

        super();

        Buyplace = buyplace;

    }


    public String getBuyplace() {

        return Buyplace;

    }


测试类:


public class Test01 {

    public static void main(String[] args) {

        Buytraintickets     fr= new Buytraintickets ("null");

        

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

            Thread th1=new Thread(fr,"窗口一");

            th1.start();

            Thread th2=new Thread(fr,"窗口二");

            th2.start();

        }

    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值