多线程的学习1

多线程

线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

进程:是程序的基本执行实体。

并发:在同一个时刻,有多个指令在单个CPU上交替执行。

并行:在同一时刻,有多个指令在多个CPU上同时执行。

多线程的实现方式

1.继承Thread类的方式进行实现

package MyThread;

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

public class ThreadDemo {
    public static void main(String[] args) {
MyThread t1=new MyThread();
        MyThread t2=new MyThread();
        t1.setName("线程1");
        t2.setName("线程2");
t1.start();
t2.start();
    }
}

2.实现Runnable接口的方式进行实现

package MyThread.a02ThreadDemo02;

public class MyRun implements Runnable{
    @Override
    public void run() {
        Thread t = Thread.currentThread();
        for (int i = 0; i < 100; i++) {
            System.out.println(t.getName()+"Helloworld");
        }
    }
}
package MyThread.a02ThreadDemo02;

public class ThreadDemo {
    public static void main(String[] args) {
        MyRun mr=new MyRun();
       Thread t1=new Thread(mr);
        Thread t2=new Thread(mr);
        t1.setName("线程1");
        t2.setName("线程2");
       t1.start();
       t2.start();
    }
}

3.利用Callable接口和Future接口方式实现

package MyThread.a03ThreadDemo03;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
       int sum=0;
        for (int i = 0; i < 100; i++) {
        sum=sum+i;
        }
        return sum;
    }
}
package MyThread.a03ThreadDemo03;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class ThreadDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc=new MyCallable();
        FutureTask<Integer> ft=new FutureTask<>(mc);
        Thread t1=new Thread();
        t1.start();
        Integer result = ft.get();
        System.out.println(result);

    }
}

常见的成员方法

package MyThread.a04ThreadDemo;

public class MyThread extends Thread{
    public MyThread() {
    }
public MyThread(String name){
        super(name);
}
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"@"+i);
        }
    }
}
package MyThread.a04ThreadDemo;

public class ThreadDemo {
    public static void main(String[] args) {
        //getName
        //1.如果我们没有给线程设置名字,线程也是有默认的名字的
        //格式:Thread-x(x序号,从0开始的)
        //2.如果我们要给线程设置名字,可以用set方法进行设置,也可以用构造方法
       //当jvm虚拟机启动之后,会自动的启动多条线程,其中有一条线程就叫main线程
        //它的作用就是调用main方法,并执行里面的代码
        /* MyThread t1=new MyThread();
        MyThread t2=new MyThread();
        MyThread t3=new MyThread("karry");
        MyThread t4=new MyThread("roy");

        t1.start();
       t2.start();*/
        //哪条线程执行到这个方法,此时获取的就是哪条线程的对象
Thread t=new Thread();
        String name = t.getName();
        System.out.println(name);
    }
}

线程的优先级

package MyThread.a05threadDEMO;

public class MyRun implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}
package MyThread.a05threadDEMO;

public class ThreadDemo {
    public static void main(String[] args) {
        MyRun mr=new MyRun();
        Thread t1=new Thread(mr,"karry");
        Thread t2=new Thread(mr,"roy");
        System.out.println(t1.getPriority());
        System.out.println(t2.getPriority());
  t1.setPriority(1);
  t2.setPriority(10);
  t1.start();
  t2.start();
    }
}

守护线程

package MyThread.a06threaddemo;

public class MyThread1 extends  Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"@"+i);
        }
    }
}
package MyThread.a06threaddemo;

public class MyThread2 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"@"+i);
        }
    }
}package MyThread.a06threaddemo;

import MyThread.a04ThreadDemo.MyThread;

public class ThreadDemo {
    public static void main(String[] args) {
        MyThread1 t1=new MyThread1();
        MyThread2 t2=new MyThread2();
        t1.setName("karry");
        t2.setName("roy");
        t2.setDaemon(true);
        t1.start();
        t2.start();
    }
}

相关推荐

  1. C++ 线笔记1 线创建

    2024-03-29 11:16:02       29 阅读
  2. Qt线学习

    2024-03-29 11:16:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 11:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 11:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 11:16:02       82 阅读
  4. Python语言-面向对象

    2024-03-29 11:16:02       91 阅读

热门阅读

  1. 自动化组高度件切割计算

    2024-03-29 11:16:02       42 阅读
  2. Docker学习指南

    2024-03-29 11:16:02       35 阅读
  3. 简述机器视觉技术在自动化行业中的典型应用

    2024-03-29 11:16:02       43 阅读
  4. 自动化更新包文件--shell脚本

    2024-03-29 11:16:02       41 阅读
  5. Go打造REST Server【四】:Graphql进阶

    2024-03-29 11:16:02       40 阅读