线程的基本使用

本文介绍Java中线程的基本使用方法,包括通过继承Thread类或实现Runnable接口创建线程,以及如何启动和同步线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                         线程的基本使用

使用一个线程步骤:1、可以使用继承extends Thread;或者也可以使用实现Runnable方法,即implement Runnable;这两个都可以实现对线程的使用。但是由于继承只能有一个,实现方法可以无数个,所以建议使用implements Runnable这个方法(ps记得导入java.lang.*包)

例:

import java.lang.*;

....

....

class Cat extends Thread{

...

...

    punlic void run(){

     .....

     }



}

或:

class Dog implements Runnable{

...

...

    punlic void run(){

     .....

     }



}



2、不管你是继承还是实现Thread,都有重写run()这个方法

例:

public void run()
    {
        while(true){
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                // TODO: handle exception
            }
            times++;
            System.out.println("我是一个线程,正在输出第"+times+"个");
            if(times==n){
                break;
            }
            
        }
    }


3、当然写好Thread这几个类后,也要创建Thread对象,并把刚刚写好的类的cat、dog对象匹配好。

例:

public class Demo_1 {

    Cat cat=null;
    Dog dog=null;
    public Demo_1(){
        cat=new Cat(10);
        dog=new Dog(10);
        
        //分别匹配两个线程
        Thread t1=new Thread(cat);
        Thread t2=new Thread(dog);

        //对这两个线程开始
        t1.start();
        t2.start();

        
        
    }

4.最后一步在主函数调用


以下是对线程的一点补充

1、线程对象只能启动一次

     结论:不管是通过继承Thread,还是通过实现Runnable接口创建线程,它们的一个对象   只能启动(即:start())一次。否则就会有异常抛出。

2、java线程的同步

     例:TicketWindows tw=new TicketWindows();

            Thread t1=new Thread(tw);

            Thread t2=new Thread(tw);

上面的代码是火车站售票窗口,t1,t2分别为 tw火车总部售票(tw一共有2000张票)。


if(num>0){
                //显示售票信息
                System.out.println(Thread.currentThread().getName()+"正在卖第"+num+"张票");
                num--;
            }
            else{
                break;//售票结束
 }

在运行过程中有t1,t2同时售1999票的时候,不符合实际。

解决问题的关键就是要保证容易出问题代码的原子性,所谓原子性就是指:当a线程在执行某段代码的时候,别的线程必须等到a线程执行完后,它才能执行这段代码。就好像好多人上厕所排队上厕所一样,厕所只有一个马桶,得一个一个解决。

3、synchronized (this){

....

.....

}

锁的使用,在里面写try {....Thread.sleep(1000);.......}catch{....}等等,即可达到线程不同步。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值