java线程

线程

基本概念:

程序:使用计算机语言编写的代码的集合,特指静态的,安装在硬盘上
进程:计算机上运行中的程序(被加载到内存),是操作系统中进行资源分配的最小单位
线程:进程可以进一步细化为线程,是进程中的最小执行单元(具体要做的某个事情),是cpu进行任务调度的最小单位
进程和线程的关系:

一个线程只隶属于一个进程,线程不能脱离进程存在

一个进程可以包含多个进程且至少有一个线程

main方法就是用来启动主线程的

线程共享进程内存资源

主线程中可以创建子线程

多线程应用:

在java中创建线程,把要执行的任务放在线程中执行,完成多线程操作

第一种方法:

创建线程类:

public class MyThread extends Thread{
    @Override
    public void run(){
        for (int i = 0; i < 50000; i++) {
            System.out.println("线程循环:"+i);
        }
    }
}

主线程类:

public static void main(String[] args) {
        MyThread myThread=new MyThread();
        myThread.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("主线程:"+i);
        }
    }
/*
主线程和线程循环交替进行输出
*/
第二种方法:

任务:

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

主线程:

		Mytask mytask=new Mytask();//创建一个任务对象

		//多态创建一个线程让mytask有start()
        Thread t1=new Thread(mytask);

        t1.start();//启动线程。执行mytask任务
        for (int i = 0; i < 1000; i++) {
            System.out.println("main:"+i);
        }
/*
交替main和Mytask
*/

通过Runnable接口创建线程的步骤如下:

1、定义实现Runnable接口的类,并实现该类中的run()方法。

2、建立一个Thread对象,并将实现的Runnable接口的类的对象作为参数传入Thread类的构造方法。

3、通过Thread类中的start()方法启动线程,并运行。

线程类的方法:

测试:

		Mytask mytask=new Mytask();//创建一个任务
		//Thread构造方法可以为线程创建名字
        Thread t1=new Thread(mytask,"第一个线程");
        t1.setName("第一线程");//setName方法设置名字
        //t1.start();
        Thread t2=new Thread(mytask,"第二线程");
        Thread t3=new Thread(mytask,"第三线程");
        Thread t4=new Thread(mytask,"第四线程");
        t4.start();
        t3.start();
		t3.join();//等待让其他线程等t3执行完后再执行
        t2.start();
        t1.start();
		t1.setPriority(10);//设置优先级 1~10 默认是5
/*
第四线程
5
第一线程
10
第二线程
5
第三线程
5
*/

任务类:

public void run(){
        //想知道当前是哪个线程在执行
        Thread t=Thread.currentThread();//currentThread获取当前线程
    	//不能用throws因为Runnable的run没有throws
        if(t.getName().equals("第二线程")){
            try {
                //让线程休眠2000ms,最后显示时会看到第二线程2000ms后再出现
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(t.getName());//获取线程名字
		System.out.println(t.getPriority());//获取线程优先级
}
守护线程:

守护线程用于后台支持任务,比如垃圾回收、释放未使用对象的内存、从缓存中删除不需要的条目。

测试:

		task t=new task();
        Thread thread=new Thread(t);

        thread.setDaemon(true);//设置线程为守护线程,设置守护线程必须再启动前进行设置
        thread.start();
        for (int i = 0; i < 10000; i++) {
            System.out.println("main:"+i);
        }

task:

public class task implements Runnable{
    @Override
    public void run(){
        while(true){
            System.out.println("我是守护线程");
        }
    }
}

你可能感兴趣的:(java,python,开发语言)