Java多线程快速入门知识

1、线程与进程的区别

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
进程是所有线程的集合,每一个线程是进程中的一条执行路径

2、为什么要用到多线程?

多线程就是提高程序的效率。比如:如果服务器同一时间内只能服务于一个客户端,其他客户端都再那里傻等的话,可见其性能的低下估计会被客户骂出翔来。

3、创建多线程的方式

1、继承Thread类,重写run方法。

class CreateThread extends Thread {
	// run方法中编写 多线程需要执行的代码
	public  void run() {
		for (inti = 0; i< 10; i++) {
			System.out.println("i:" + i);
		}
	}
}
public  class ThreadDemo {

	public  static  void main(String[] args) {
		System.out.println("-----多线程创建开始-----");
		// 1.创建一个线程
		CreateThread createThread = new CreateThread();
		// 2.开始执行线程 注意 开启线程不是调用run方法,而是start方法
		System.out.println("-----多线程创建启动-----");
		createThread.start();
		System.out.println("-----多线程创建结束-----");
	}
}

2、实现Runnable接口,重写run方法。

class CreateRunnable implements Runnable {

	@Override
	publicvoid run() {
		for (inti = 0; i< 10; i++) {
			System.out.println("i:" + i);
		}
	}
}
public  class ThreadDemo2 {
	public  static  void main(String[] args) {
		System.out.println("-----多线程创建开始-----");
		// 1.创建一个线程
		CreateRunnable createThread = new CreateRunnable();
		// 2.开始执行线程 注意 开启线程不是调用run方法,而是start方法
		System.out.println("-----多线程创建启动-----");
		Thread thread = new Thread(createThread);
		thread.start();
		System.out.println("-----多线程创建结束-----");
	}
}

3、使用匿名内部类方式

public  class ThreadDemo2 {
	public static void main(String[] args) {
	System.out.println("-----多线程创建开始-----");
		 Thread thread = new Thread(new Runnable() {
			public void run() {
				for (int i = 0; i< 10; i++) {
					System.out.println("i:" + i);
				}
			}
		});
		 thread.start();
		 System.out.println("-----多线程创建结束-----");
	}
	}

使用继承Thread类还是使用实现Runnable接口好?
使用实现实现Runnable接口好,原因实现了接口还可以继续继承,继承了类不能再继承。

4、用户线程与守护线程的区别

Java中有两种线程,一种是用户线程,另一种是守护线程。
用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止
守护线程当进程不存在或主线程停止,守护线程也会被停止。
使用setDaemon(true)方法设置为守护线程

public class DaemonThread {
   public static void main(String[] args) {
   	Thread thread = new Thread(new Runnable() {
   		@Override
   		public void run() {
   			while (true) {
   				try {
   					Thread.sleep(100);
   				} catch (Exception e) {
   					// TODO: handle exception
   				}
   				System.out.println("我是子线程...");
   			}
   		}
   	});
   	thread.setDaemon(true);
   	thread.start();
   	for (int i = 0; i < 10; i++) {
   		try {
   			Thread.sleep(100);
   		} catch (Exception e) {
   		}
   		System.out.println("我是主线程");
   	}
   	System.out.println("主线程执行完毕!");
   }
}

5、Thread中的join()方法作用

join()作用就是让其他线程变为等待,例如:t1.join() 让其他线程等待,直到当前t1线程执行完毕,才释放。
例如有这么一个需求,现在有T1,T2,T3,三个线程,你怎么保证T2在T1执行完后执行,T3在T2执行完后执行。

public class JoinThreadDemo02 {
	public static void main(String[] args) {
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				for (int i = 0; i < 20; i++) {
					System.out.println("t1,i:" + i);
				}
			}
		});
		Thread t2 = new Thread(new Runnable() {
			public void run() {
				try {
					t1.join();
				} catch (Exception e) {
					// TODO: handle exception
				}
				for (int i = 0; i < 20; i++) {
					System.out.println("t2,i:" + i);
				}
			}
		});
		Thread t3 = new Thread(new Runnable() {
			public void run() {
				try {
					t2.join();
				} catch (Exception e) {
					// TODO: handle exception
				}
				for (int i = 0; i < 20; i++) {
					System.out.println("t3,i:" + i);
				}
			}
		});
		t1.start();
		t2.start();
		t3.start();
	}
}

.

作者:程序员那些破事儿
出处: https://blog.csdn.net/wjq6940
欢迎投稿分享个人工作,生活,项目经验。
号内有各类编程教学视频资源哦!
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值