单线程和多线程
首先我们都知道线程是隶属于进程的,单线程就是程序中只有一个线程,多线程就是程序中有多个线程.通过连个例子理解多线程和单线程.
(一)单线程
创建包:package com.ffyc.javathread;
创建类:public class Sample { }
package com.ffyc.javathread;
public class Sample {//方法1public void method1(){System.out.println("method1");}//方法2public 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()方法,执行完后再一次打印输出,执行过程看下图:
从上图不难发现,程序是顺着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接口,这个不叫线程类
* 只能叫线程要执行的任务
* */@Overridepublic 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类中创建一个任务对象即可,每创建一个线程,要执行的任务都传递创建的那一个任务对象。输出结果:
输出了三个线程的优先级。
上面的程序中,
MyThread myth = new MyThread();//创建了一线程,并为其分配了一个任务,线程名称为"窗口1"Thread th1 = new Thread(myth,"窗口1");th1.start();
这一段就是创建了线程th1,执行任务myth,给线程起名:“窗口1”。 注意,一定要调用start()方法启动线程,不能只创建,不启动。main()方法中创建了两个线程: th1 , th2 ,再加上main()这个主线程,共有三个线程,也就是多线程。
程序的输出结果中并没有按main()方法中的一步一步执行,本来先创建的是th1,但是执行时先执行的是th2线程,这也体现了多线程执行的特点,每个线程的执行顺序和操作系统的调度有关。
有所收获别忘了点赞呦~