一、什么是多线程
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。
2.原理
实现多线程是采用一种并发执行机制
并发:指两个或多个事件在同一时间段内发生。(举例:唐三藏,猪八戒,沙悟净被困火海,孙悟空分身术限号,只能一个一个救,在极短的时间救出八戒三人)
3.优缺点
优点:
1 使用线程可以把占据时间长的程序中的任务放到后台去处理。
2 程序的运行速度可能加快
3 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等
缺点:
1 如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
2 更多的线程需要更多的内存空间。
3 线程可能会给程序带来更多“bug”,因此要小心使用 。
4 线程的中止需要考虑其对程序运行的影响。
5 通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
4.构造方法
public Thread():分配一个新的线程对象。
public Thread(String name):分配一个指定名字的新的线程对象。
public Thread(Runnable target):分配一个带有指定目标新的线程对象。
public Thread(Runnable target,String name):分配一个带有指定目标新的线程对象并指定名字。
5.多线程的实现步骤(Thread类)
1.定义类继承Thread类 2.重写run方法,run方法中的代码就会按照多线程机制进行调用和执行 3.在mian方法中定义类的对象,调用start()方法启动线程,会自动调用run方法
package KeTangTest;
public class Thread1 extends Thread{
public Thread1(){
}
public Thread1(String name){
this.setName(name);
}
public void run() {
for (int i=0;i<100;i++){
System.out.println(this.getName()+"执行打游戏。。。。。"+i);
}
}
}
package KeTangTest;
public class Thread2 extends Thread{
public void run() {
for (int i=0;i<100;i++){
System.out.println("执行听歌。。。。。"+i);
}
}
}
package KeTangTest;
//多线程的实现步骤
//1.定义类继承Thread类
//2.重写run方法,run方法中的代码就会按照多线程机制进行调用和执行
//3.在mian方法中定义类的对象,调用start()方法启动线程,会自动调用run方法
public class ThreadTest {
//案例:用多线程完成两个循环交替执行
public static void main(String[] args) {
Thread1 t1=new Thread1();
Thread2 t2=new Thread2();
//线程类不需要显示的调用run方法,只需要调用start()方法启动线程,自动就会执行run方法
t1.start();
t2.start();
}
}
6.Runnable接口实现类实现多线程的步骤(Runnable接口)
1.定义实现Runnable接口
2.重写run方法
3.在mian方法中实例化Runnable接口的实现类对象
4.定义两个线程Thread类的对象,把Runnable接口的实现对象传入构造方法中
5.线程类对象调用start方法,启动线程,自动执行Runnable接口的实现类中的run方法
package KeTangTest;
public class Runnable1 implements Runnable{
@Override
public void run() {
for (int i=0;i<100;i++){
System.out.println("Runnable执行打游戏。。。。。"+i);
}
}
}
package KeTangTest;
public class Runnable2 implements Runnable{
@Override
public void run() {
for (int i=0;i<100;i++){
System.out.println("Runnable执行听歌。。。。。"+i);
}
}
}
package KeTangTest;
/**
* Runnable接口实现类实现多线程的步骤:
* 1.定义实现Runnable接口
* 2.重写run方法
* 3.在mian方法中实例化Runnable接口的实现类对象
* 4.定义两个线程Thread类的对象,把Runnable接口的实现对象传入构造方法中
* 5.线程类对象调用start方法,启动线程,自动执行Runnable接口的实现类中的run方法
*
*/
public class ThreadTest1 {
public static void main(String[] args) {
Runnable r1=new Runnable1();
Runnable r2=new Runnable2();
//Runnable接口的实现实现多线程,必须借助Thread类才能实现
Thread t1=new Thread(r1);
Thread t2=new Thread(r2);
t1.start();
t2.start();
}
}