单线程和多线程

首先我们都知道线程是隶属于进程的,单线程就是程序中只有一个线程,多线程就是程序中有多个线程.通过连个例子理解多线程和单线程.

(一)单线程

创建包:package com.ffyc.javathread;

创建类:public class Sample { }

package com.ffyc.javathread;
public class Sample {
    //方法1
	public void method1(){
    	System.out.println("method1");
	}
    //方法2
	public void method2(){
    	method1();
    	System.out.println("method2");
	}
    /**
    *主方法(主线程),程序的入口
    * 这不是多线程案例,是单线程
    * @param args
    */    
	public static void main(String[] args) {
    	System.out.println("主线程开始");
    	Sample s = new Sample();
    	s.method2();
    	System.out.println("主线程结束");
    }
}

上面的程序,我们很容易看懂,从main方法进入程序后,打印输出,创建Sample类的对象,然后调用了method2()方法,进入method2()方法后又调用method1()方法,执行完后再一次打印输出,执行过程看下图:

java 单线程和单例 java单线程和多线程的区别_开发语言

从上图不难发现,程序是顺着main方法这条主线一气呵成执行完的,所以这是一个单线程。

(二)多线程

package com.ffyc.javathread.demo2;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MyThread implements Runnable {
/*
* 我们自己写的MyThread类实现Runnable接口,这个不叫线程类
* 只能叫线程要执行的任务
* */
    @Override
    public void run() {
        //输出任务的优先级
        System.out.println
            (Thread.currentThread().getName()+": "+Thread.currentThread().getPriority());

    }

}
package com.ffyc.javathread.demo2;


public class Test {
    public static void main(String[] args) {
        /*MyThread myThread = new MyThread();    myThread. 不出start方法,无法启动线程
        上面的类中写过了,MyThread类不能叫线程,这个类中的内容只是线程要执行的任务
                 */
        
        MyThread myth = new MyThread();
        
        //创建了一线程,并为其分配了一个任务,线程名称为"窗口1"
        Thread th1 = new Thread(myth,"窗口1");
        th1.start();

        //创建了一线程,并为其分配了一个任务,线程名称为"窗口2"
        Thread th2 = new Thread(myth,"窗口2");
        th2.start();
     
        Thread.currentThread().setPriority(10);  //设置主线程(main()方法)的优先级
        th1.setPriority(8);  //设置线程(窗口1)的优先级
        th2.setPriority(6);   //设置线程(窗口2)的优先级
        //输出主线程的优先级
        System.out.println("main: "+Thread.currentThread().getPriority());

       
    }
}

在测试类()test类中创建一个任务对象即可,每创建一个线程,要执行的任务都传递创建的那一个任务对象。输出结果:

java 单线程和单例 java单线程和多线程的区别_后端_02

输出了三个线程的优先级。

上面的程序中,

MyThread myth = new MyThread();
        
        //创建了一线程,并为其分配了一个任务,线程名称为"窗口1"
        Thread th1 = new Thread(myth,"窗口1");
        th1.start();

这一段就是创建了线程th1,执行任务myth,给线程起名:“窗口1”。 注意,一定要调用start()方法启动线程,不能只创建,不启动。main()方法中创建了两个线程: th1 , th2 ,再加上main()这个主线程,共有三个线程,也就是多线程。

程序的输出结果中并没有按main()方法中的一步一步执行,本来先创建的是th1,但是执行时先执行的是th2线程,这也体现了多线程执行的特点,每个线程的执行顺序和操作系统的调度有关。