欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java之多线程

程序员文章站 2022-03-09 09:28:42
...

1.什么是多线程?
线程其实就是程序执行的一条路径 一个进程可以包含多个线程
多线程是并发进行的
底层 其实还是单线程(cpu运行效率极其高 )
并发:两个任务同时请求运行 而处理器只能执行一个 不过由于处理的特别快感觉是两个任务同时运行
并行:就是两个任务一起同步运行(需要多核cpu)

2.java程序运行原理
jvm是多线程的 有两个线程: 垃圾回收线程 主函数main是个线程

3.Thread类
继承Thread
重写run 方法
调用start方法

public class Main{ 
	public static void main(String args[]) throws Exception{
		 
		 MyThread mt = new MyThread();
		 mt.start();
		 
		 for(int i=1;i<=1000;i++) {
			 System.out.println("主线程代码");
		 }
	 }
}
class MyThread extends Thread{
	public void run()
	{
		for(int i=1;i<=1000;i++) {
			 
			System.out.println("我的线程代码");
		 }
	}
}

4.实现Runnable
实现Runnable接口
重写run方法
因为要启动线程必须通过Thread类的start方法才能使用!
所以必须要创建Thread的对象 把Runable作为target参数传递给Thread

public class Main{ 
	public static void main(String args[]) {
		demo de = new demo();
		new Thread(de).start();    //1.第一种启动线程的方法  匿名对象
		
		Thread t = new Thread(de); //2.第二种启动线程的方法
		t.start();
		
		Runnable run = de;         //3.第三种启动线程的方法 父类引用指向子类对象
		new Thread(run).start();

		for(int i=1;i<=1000;i++) {
			 System.out.println("主线程代码");
		 }
	}
}
class demo implements Runnable
{
	@Override
	public void run() {
		for(int i=1;i<=1000;i++) {
			 System.out.println("我的线程代码");
		 }
	}
}

Runnable能够实现多线程的原理 (源码分析)
通过作为Thread类的构造参数 传入底层的init方法 最后给Runnable 类型的target赋值 然后去调用run方法

两者的区别:
1.继承 代码比较简单 不过有父类的话就不用了
2.实现 代码比较复杂 可以多实现
个人而言喜欢使用Runnable接口 扩展性比较强
当然具体情况具体分析

6.用匿名内部类实现多线程

public class Main{ 
	public static void main(String args[]) {
		new Thread() {
			public void run()
			{
				for(int i=1;i<=1000;i++) {
					 System.out.println("线程1111111111代码");
				 }
			}
		}.start();
		
		new Thread(new Runnable() {
			public void run()
			{
				for(int i=1;i<=1000;i++) {
					 System.out.println("线程33333333333代码");
				 }
			}
		}).start();
	}	
}