欢迎来到AgCl9的博客

扩大
缩小

个人技术博客-java多线程实现

这个作业属于哪个课程 2021春软件工程实践|S班(福州大学)
这个作业要求在哪里 软件工程实践总结&个人技术博客
这个作业的目标 个人技术总结

  • java多线程的基本使用

  • 定义任务、创建和运行线程

  • 定义任务

    继承Thread类
    实现Runnable接口 (可以说是 将任务和线程分开了)
    实现Callable接口
    任务逻辑写在Thread类的run方法中,有单继承的局限性,创建多线程时,每个任务有成员变量时不共享,必须加static才能做到共享,Runnable和Callable解决了Thread的局限性。

class T extends Thread {
    @Override
    public void run() {
        log.info("我是继承Thread的任务");
    }
}
class R implements Runnable {

    @Override
    public void run() {
        log.info("我是实现Runnable的任务");
    }
}
class C implements Callable<String> {

    @Override
    public String call() throws Exception {
        log.info("我是实现Callable的任务");
        return "success";
    }
}
  • 创建线程

    创建线程的方法:通过Thread类直接创建线程;利用线程池内部创建线程。
  • 运行线程

Thread t = new Thread(){
  @Override
  public void run() {
    log.info("我是Thread匿名内部类的任务");
  }
};

new Thread(new R()).start();

new Thread(new Runnable() {
    @Override
    public void run() {
        log.info("我是Runnable匿名内部类的任务");
    }
}).start();

new Thread(() -> log.info("我是Runnable的lambda简化后的任务")).start();

FutureTask<String> target = new FutureTask<>(new C());
new Thread(target).start();
log.info(target.get());
  • 线程的优先级

    yield()方法会让运行中的线程切换到就绪状态,重新争抢cpu的时间片,争抢时是否获取到时间片看cpu的分配。程的优先级
    线程内部用1~10的数来调整线程的优先级,默认的线程优先级为5
    ​ cpu比较忙时,优先级高的线程获取更多的时间片;
    cpu比较闲时,优先级设置基本没用/.
public static native void yield();

Runnable r1 = () -> {
    int count = 0;
    for (;;){
       log.info("---- 1>" + count++);
    }
};
Runnable r2 = () -> {
    int count = 0;
    for (;;){
        Thread.yield();
        log.info("            ---- 2>" + count++);
    }
};
Thread t1 = new Thread(r1,"t1");
Thread t2 = new Thread(r2,"t2");
t1.start();
t2.start();

参考
作者:胖胖胖胖虎阿

posted on 2021-06-28 11:40  AgCl9  阅读(47)  评论(1编辑  收藏  举报

导航