java 多线程是什么意思 java多线程有什么用_多线程

概念:

Java多线程的重要性不言而喻,不管是平时开发还是面试问题,多线程始终作为很看重的一点,那么我们来看看多线程到底是怎么样的吧

说到线程就不得不提到进程

进程和线程

进程:可以看作一段代码,一个正在运行的程序
线程:可以堪称计算机运行中的一小块代码
线程是进程中的最小单位

进程的概念:

任务管理器可以有多个进程,每个进程运行的都是可执行程序,一个可执行程序就是一个软件,可执行程序的本质就是在计算机当中运行的一块代码

线程的作用:

它包装了一个功能,交给CPU去进行处理

1.独立使用CPU资源

2.每一个线程都是独立存在的,互不干扰

自定义线程

新建自定义线程的类,继承Thread,然后覆写run方法实现想要的功能,再到主方法里面去调用,文最末尾附上Demo

注意事项

直接调用run方法和start的区别?

  1. 可以直接调用run方法,但是没有启动一个独立的线程;
  2. 只有调用start 才回启动一个独立的线程;

自己启动的线程和主线程有关系吗?

直接写一个最简单的hello word 程序,就有一个主线程

一个线程一旦启动就是独立的了,和创建启动它的环境没有直接的包含关系

实现方式

继承Thread实现

实现方式一

自定义类继承Theard来进行创建,覆写run方法,然后在主方法中调用对象.start();方法启动

引入Runnable实现

实现方式二

自定义类implements Runnable接口,覆写run方法,在主方法中实例化自定义类的对象和Thread对象,在实例化Thread对象的时候传入自定义类的对象,然后Thread对象.start()来启动

Demo

Thread实现

自定义听音乐线程类

package com.ifueen.classdemo._01Game;

public class MusicThread extends Thread{
	@Override
	public void run() {		//覆写run方法
		// TODO Auto-generated method stub
		for (int i = 0; i < 30; i++) {
			System.out.println("正在听音乐:"+"第"+i+"次");			
		}
	}
}

自定义玩游戏线程类

package com.ifueen.classdemo._01Game;

public class GameThread extends Thread{
	@Override
	public void run() {		//覆写run方法
		// TODO Auto-generated method stub
		for (int i = 0; i < 30; i++) {
			System.out.println("正在玩游戏:"+"第"+i+"次");
		}
	}
}

测试主类

package com.ifueen.classdemo._01Game;

public class Game {
	/*
	 * 启动两个线程
	 * 
	 * 玩游戏线程
	 * 听音乐线程
	 * */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GameThread gt = new GameThread();
		MusicThread mc = new MusicThread();
		
		gt.start();  		//启动游戏线程
		mc.start();    //启动音乐线程
		
	}

}

引入Runnable实现

自定义线程类

package com.ifueen.classdemo._05Runnable;

public class _05MyThread implements Runnable {
	int num = 50;
	@Override
	public void run() {
		while(num>0){//循环卖所有的票
			if(num>0){//卖一张票
				System.out.println("您的票号是:"+num);
				num--;
			}
		}
	}

}

测试主类

package com.ifueen.classdemo._05Runnable;

public class _05Test {
	/*
	 * 1.线程的第二种实现方式,自定义类  implements Runnable
	 * 
	 * 2.注意:接口实现方式,字段,没有加static也已经共享了,因为我们只创建了一个mt对象
	 * 
	 * 
	 * */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		_05MyThread mt = new _05MyThread();		//实例化自定义对象
		
		Thread t1 = new Thread(mt);		//新建线程并传入自定义对象
		Thread t2 = new Thread(mt);
		Thread t3 = new Thread(mt);
		
		t1.start();		//启动线程
		t2.start();
		t3.start();
	}

}

这就是线程最基本的概念和实现方式