线程(上)

线程

程序:为完成特定任务,用某种语言编写的一组指令的集合,即一段静态代码

进程:正在执行的程序,加载到内存中执行

线程:进程可进一步细化为线程,是一个进程内部的最小执行单元

进程与线程的关系

一个进程中可以包含多个线程,一个线程只属于一个进程,线程不能脱离进程存在.

一个进程至少包含一个线程,即主线程.例如java中的main就是

所有进程共享进程资源

在主线程中可以创建并启动其他线程

多线程

多线程:在一个进程中,可以拥有多个线程,执行多个任务

何时需要多线程?

程序需要同时执行多个任务

多线程的优点:

同时执行多个任务,功能强大

提高CPU利用率,CPU执行是以线程为单位

改善数据结构,将复杂任务分为多个线程独立运行

多线程的缺点:

线程越多,堆内存,CPU占用越高(处理方法:硬件升级)

多个线程对同一个共享资源进行访问,会出现各种不正常情况

解决方法:线程同步,效率低

创建线程

1.继承Thread类

重写run();方法

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

Test测试

public class Test {
     
    public static void main(String[] args) {
     
        ThreadDemo threadDemo = new ThreadDemo();
        threadDemo.start();//启动线程
        ThreadDemo2 threadDemo2 = new ThreadDemo2();
        threadDemo2.start();//启动线程

        for (int i = 0; i < 1000; i++) {
     
            System.out.println("main:"+i);
        }
    }
}

2.实现Runnable接口

public class ThreadDemo implements Runnable{
     
    @Override
    public void run() {
     
        for (int i = 0; i <100 ; i++) {
     
            System.out.println("Thread:"+i);
        }
    }
}

test测试

public static void main(String[] args) {
     
    //创建一个线程要执行的任务
    ThreadDemo threadDemo = new ThreadDemo();
    //创建线程,并将任务添加到线程中
    Thread t = new Thread(threadDemo);
        t.start();//启动线程
        for (int i = 0; i < 100; i++) {
     
            System.out.println("main:" + i);
        }
    }

线程中的方法

run();继承线程中需要执行的任务代码

start();启动线程

Tread类中的构造方法

Thread(Runnable target);

Thread(Runnable target , String name);

Thread.currentThread(); 获得当前正在执行的线程

setName();为线程设置名称

getName();获取线程名称

线程优先级

java中线程优先级,用整型1-10

默认优先级为5

 public static void main(String[] args) {
     
        ThreadDemo threadDemo = new ThreadDemo();//创建一个线程要执行的任务
        Thread t = new Thread(threadDemo, "自定义线程1");//创建线程,并将任务添加到线程中
        t.setPriority(1);
        t.start();//启动线程
        Thread t1 = new Thread(threadDemo );//创建线程,并将任务添加到线程中
        t1.setName("自定义线程2");//设置线程名称
        t1.setPriority(10);//设置优先级
        t1.start();//启动线程

        for (int i = 0; i < 100; i++) {
     
            System.out.println("main:" + i);
        }
        System.out.println(t.getPriority());
        System.out.println(t1.getPriority());
        System.out.println(Thread.currentThread().getName());//获取当前正在执行的线程名称
        System.out.println(Thread.currentThread().getPriority());//获取当前线程的优先级
    }
public class ThreadDemo implements Runnable{
     
    @Override
    public void run() {
     
        for (int i = 0; i <100 ; i++) {
     
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

运行结果:

main:0
main:1
自定义线程1:0
自定义线程1:1
自定义线程1:2
自定义线程1:3
自定义线程1:4
自定义线程1:5
自定义线程1:6
自定义线程1:7
自定义线程1:8
自定义线程1:9
自定义线程2:0
自定义线程2:1
自定义线程2:2
自定义线程2:3
自定义线程2:4
自定义线程2:5
自定义线程2:6
自定义线程2:7
自定义线程2:8
自定义线程2:9
main:2
main:3
main:4
main:5
main:6
main:7
main:8
main:9
1
10
main
5

CPU执行策略:

时间片:就是排队,先来先服务

抢占式:对优先级高的先执行

你可能感兴趣的:(JAVA,java,多线程)