Java线程的创建

Java线程的创建

方式一:继承Thread类

在Java中要实现线程,最简单的方式就是扩展Thread类,重写其中的run方法,方法原型如下:

Thread类中的run方法本身并不执行任何操作,如果我们重写了run方法,当线程启动时,它将执行run方法。

//线程创建方式一:继承Thread类
public class ThreadDemo extends Thread {    
    //重写run方法    
    //并将线程组需要执行的任务写在run方法里面    
    @Override    
    public void run() {        
        for (int i = 0; i < 1000; i++){            
            System.out.println("run:"+i);        
        }   
    }
}


测试类:
public class Test {
    //在main方法中创建并启动其他线程
    public static void main(String[] args) {
        ThreadDemo td=new ThreadDemo();
        //td.run();只是方法的调用,不是线程启动
        td.start();//启动线程
        for (int i = 0; i < 1000; i++) {
            System.out.println("main:"+i);
        }

    }
}

方式二:实现Runnable接口

java.lang.Runnable接口中仅仅只有一个抽象方法:public void run(){}

也可以通过实现Runnable接口的方式来实现线程,只需要实现其中的run方法即可;

重写该方法即可(线程所执行的任务写在方法体中)

Runnable接口的存在主要是为了解决Java中不允许多继承的问题。

package com.ff.Javathread.day1.Demo2;
//创建线程方法2:实现Runnable接口
public class ThreadDemo implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            //Thread.currentThread()获得当前正在执行的线程
        }
    }
}


测试类:package com.ff.Javathread.day1.Demo2;

public class Test {
    public static void main(String[] args) {
        /*线程执行任务
         MyThread r = new MyThread();
        创建一个线程作为外壳,将r包起来,
          Thread thread = new Thread(r);
         thread.start();
        */
        ThreadDemo td = new ThreadDemo();//创建一个线程任务
        Thread t = new Thread(td, "创建的线程1");//创建一个启动线程的对象
        t.setName("xxx");//设定线程的名字
        t.setPriority(10);//设定线程的优先级,优先级大地有大概率优先执行,并不绝对
        t.start();
        Thread t2 = new Thread(td, "创建的线程2");
        t2.setPriority(1);
        t2.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main:" + i);
        }
        System.out.println(Thread.currentThread().getName());
        //会产生多线程的交替执行
        System.out.println(t.getPriority());
        System.out.println(t2.getPriority());//获得线程的优先级
    }
}

区别:实现接口时需要Thread thread = new Thread(进行包装)

方式二的好处:

多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。

Thread类的方法

一.构造方法

1.Thread();创建一个新线程

2.Thread(String name);创建一个新线程并为其命名

3.Thread(Runnable target)利用Runnable对象创建一个线程,启动时将执行该对象的run方法

用于包装

4.Thread(Runnable target,String name)利用Runnable对象创建一个线程并为其命名,启动时将执行该对象的run方法

二.常用方法

方法
void start()启动线程
final void setName(String name)设置线程的名称
final String getName()返回线程的名称
final void setPriority(int newPriority)设置线程的优先级
final int getPriority()返回线程的优先级
final void join()throws InterruptedException等待线程终止
static Thread currentThread()返回对当前正在执行的线程对象的引用
static void sleep(long millis)throws InterruptedException让当前正在执行的线程休眠(暂停执行),休眠时间由millis(毫秒)指定

线程优先级

对于计算机的cpu来说同一时间节点只能执行一个线程

所以说需要各个线程之间不断交替获得cpu的使用权

线程之间的交替使用

优先级用整数表示,取值范围是1~10,一般情况下,线程的默认优先级都是5,但是也可以通过setPriority和

getPriority方法来设置或返回优先级;

调度策略
1.时间片

2.抢占式:高优先级的线程抢占CPU
Java的调度方法
同优先级线程组成先进先出队列(先到先服务),使用时间片策略
默认优先级都是5,但是也可以通过setPriority和**

getPriority方法来设置或返回优先级;

调度策略
1.时间片

2.抢占式:高优先级的线程抢占CPU
Java的调度方法
同优先级线程组成先进先出队列(先到先服务),使用时间片策略
对高优先级,使用优先调度的抢占式策略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值