活动地址:CSDN21天学习挑战赛
目录
基本概念
1,概述
1、程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。
2、进程:是程序的一次执行过程,或是正在运行的一个程序。
3、线程:进程可进一步细化为线程,是一个程序内部的一条执行路径。
2,多线程的优点
1、提高应用程序的响应。
2、提高计算机系统CPU的利用率。
3、改善程序结构。
**
创建线程的方式一
1,继承thread类
1、创建一个继承于Thread类的子类
2、重写Thread类的run(),将此线程需要执行的操作声明在run()中。
3、创建Thread类的子类对象
4、通过此对象调用start()
2,举例
//1、创建一个继承于Thread类的子类 class MyThread extends Thread{ //2、重写Thread类的run() @Override public void run() { for (int i = 0; i < 100; i++){ if (i % 2 == 0 ){ System.out.println(Thread.currentThread().getName() + ":" +i); } } } } public class ThreadTest { public static void main(String[] args) { //3、创建Thread类的子类对象 MyThread t1 = new MyThread(); //4、通过此对象调用start():a、启动当前线程 b、调用当前线程的run() t1.start(); //问题一:我们不能直接调用run()的方式启动线程 // t1.run(); //问题二:再启动一个线程,遍历100以内的偶数。 // 不可以让已经start()的线程去执行。会报IllegalThreadStateException // t1.start(); //我们需要重新创建一个线程对象 MyThread t2 = new MyThread(); t2.start(); //如下操作仍然在main线程中执行 for (int i = 0; i < 100; i++){ if (i % 2 == 0 ){ System.out.println(Thread.currentThread().getName() + ":" +i + "****"); } } } }
3,线程的常用方法
1、start(): 启动线程,并执行对象的run()方法
2、run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
3、currentThread(): 静态方法,返回执行当前代码的线程
4、getName():获取当前线程的名字
5、setName():设置当前线程的名字
6、yield():释放当前CPU的执行权
7、join():在线程A中调用线程B的join(),此时线程A进入阻塞状态,直到线程B完全执行后,线程A才结束阻塞状态
8、stop():已过时,当执行此方法时,强制结束当前线程
9、sleep(long millitime):让当前线程"睡眠"指定millitime毫秒,在指定时间内,当前线程是阻塞状态
10、isAlive():判断当前线程是否存活
4,线程的优先级
1、默认优先级
MAX_PRIORITY:10
MIN _PRIORITY:1
NORM_PRIORITY:5
2、如何设置当前线程的优先级
getPriority():获取线程优先级
setPriority(int p):设置线程优先级说明:高优先级线程要抢占低优先级线程cpu的执行权。
高优先级只是高概率下被执行,并不意味着当高优先级执行完以后,低优先级才执行。
4,举例
public class Test { public static void main(String[] args) { Hello h1 = new Hello("Thread:1"); //设置分线程的优先级 h1.setPriority(Thread.MAX_PRIORITY); h1.start(); //给主线程命名 Thread.currentThread().setName("主线程"); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); for (int i = 0; i < 100; i++){ if (i % 2 == 0){ System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i); } //判断线程h1是否存活 System.out.println(h1.isAlive()); } } class Hello extends Thread{ @Override public void run() { for (int i = 0; i < 100; i++){ if (i % 2 == 0){ System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i); } } public Hello(String name){//通过构造器命名 super(name); } }
提醒:在发布作品前请把不用的内容删掉(活动地址请保留)