微信公众号:Java患者
专注Java领域技术分享
多线程
什么是线程
线程是程序执行的一条路径,一个进程中可以包含多条线程
多线程并发执行可以提高程序的效率,可以同时完成多项工作
多线程并行和并发的区别
并行就是两个任务同时进行,需要多核CPU
并发是指两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行.
java程序运行原理和jvm的启动是多线程的吗
java程序运行原理
java命令会启动java虚拟机,启动jvm,等于启动了一个应用程序,也就是启动过来一个进程,该进程会自动启动一个"主线程",然后主线程去调用某个类的main方法
jvm的启动是多线程的吗
jvm启动至少启动了垃圾回收线程和主线程,所以是多线程的
多线程程序实现的方式1
public class Demo2_Thread {
/**
* @param args
*/
public static void main(String[] args) {
MyThread mt = new MyThread(); //4,创建自定义类的对象
mt.start(); //5,开启线程
for(int i = 0; i < 3000; i++) {
System.out.println("bb");
}
}
}
class MyThread extends Thread { //1,定义类继承Thread
public void run() { //2,重写run方法
for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
}
多线程程序实现方式2
public class Demo3_Runnable {
/**
* @param args
*/
public static void main(String[] args) {
MyRunnable mr = new MyRunnable(); //4,创建自定义类对象
//Runnable target = new MyRunnable();
Thread t = new Thread(mr); //5,将其当作参数传递给Thread的构造函数
t.start(); //6,开启线程
for(int i = 0; i < 3000; i++) {
System.out.println("bb");
}
}
}
class MyRunnable implements Runnable { //1,自定义类实现Runnable接口
@Override
public void run() { //2,重写run方法
for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
}
守护线程
setDaemon(),设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动退出
加入线程
join() 当前线程暂停,等待指定的线程执行结束后,当前线程再继续
join(int) 可以等待指定的毫秒之后继续
礼让线程
setPriority() 设置线程的优先级
同步代码块
什么情况下需要同步
当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这时就需要同步
如果两段代码是同步的,那么同一时间只能执行一段,在一段代码没执行结束之前,不会执行另外一段代码.
同步代码块
class Printer { Demo d = new Demo(); public static void print1() { synchronized(d){ //锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象 System.out.print("程"); System.out.print("序"); System.out.print("员"); System.out.print("\r\n"); } } public static void print2() { synchronized(d){ System.out.print("码"); System.out.print("农"); System.out.print("\r\n"); } } }
使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块
多个同步代码块如果使用相同的锁对象,那么他们就是同步的
资料 · 福利
回复 【Java】即可获取最新零基础Java视频资料
回复 【激活】即可获取IDEA、datagrip等系统激活方式
回复 【面试题】即可获取Java技术相关面试题
往期 · 精彩
专注分享Java技术,跟我一起学习吧
长按识别二维码关注