JAVA线程

java线程

进程:正在运行的程序
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少一个线程.
一个程序至少一个进程,一个进程可以包括多个线程.
程序运行原理
分时调度: 所有线程轮流使用CPU
抢占式调度: 优先让优先级高的线程使用CPU,优先级相同的,随机选择一个java线程.

线程

thead()
一种方法是声明thread的子类.该子类应该重写thread类的run方法.创建对象,开启线程.run方法相当于其他线程的main方法

另一种声明RUNable的接口,然后去实现它.

###继承

//Mythread
/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 8:11
 */

/*
1.定义一个类继承Thread类
2.重写run方法
3.创建子类对象
4.调用子类对象的start方法,开启线程并执行告诉jvm开启一个线程调用run方法
 */

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i=0;i<50;i++){
            System.out.println("thread"+i);
        }
    }

    @Override
    public synchronized void start() {
        super.start();
    }

    //if 需要执行的代码比较耗时,我们就可以为他单独创建一个线程
    public void fun(){
        for (int i=0;i<10;i++){
            System.out.println(i);
        }
    }

}

/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 8:37
 */
public class Test1 {
    public static void main(String[] args) {
        MyThread mt1=new MyThread();
        MyThread mt2=new MyThread();
        mt1.start();
        mt2.start();
       /* mt1.fun();
        mt2.fun();*/
       for (int i=0;i<100;i++){
           System.out.println("main"+i);
       }
    }
}

运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DkY5pC9i-1573690646498)(./Annotation 2019-10-24 085930.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mc5WukxA-1573690646499)(./1571879686080.png)]

实现接口

/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 9:15
 */
public class MyRunnable extends Thread {
    @Override
    public void run() {
        for (int i=0;i<50;i++){
            System.out.println(Thread.currentThread().getName()+"-thread-"+i);
        }
    }

    @Override
    public synchronized void start() {
        super.start();
    }
}
/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 9:15
 */
public class MyRunTest {
    public static void main(String[] args) {
        MyRunnable mr1=new MyRunnable();
        Thread t1=new Thread(mr1,"run1");//开启一个线程,并给他重命名
        Thread t2=new Thread(mr1,"run2");//又开启一个线程,并给他重命名
        t1.start();
        t2.start();
        for (int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"--"+i);
        }
    }
}

买票系统

/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 9:24
 */
public class TicketSell extends Thread {
    private int num=100;
    public void run(){
        while (true){
            if (num>0){
                System.out.println(Thread.currentThread().getName()+"正在出售,第"+(num--)+"张票");
            }
            else{
                break;
            }
        }
    }
}



/**
 * @Author ShangKeJie
 * @Class BigData182
 * @Date 2019/10/24 - 9:26
 */
public class TicketSellTest {
    public static void main(String[] args) {
        TicketSell ts1=new TicketSell();
        TicketSell ts2=new TicketSell();
        TicketSell ts3=new TicketSell();
        ts1.setName("窗口1");
        ts2.setName("窗口2");
        ts3.setName("窗口3");
        ts1.start();
        ts2.start();
        ts3.start();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2ntC9jf-1573690646500)(./1571880659278.png)]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值