Java多线程快速入门

1、 多线程概述(为什么我们要用多线程)


进程:  是一个正在执行中的程序,每一个进程都有一个执行顺序。该顺序可以叫做执行路径,或者叫做一个控制单元。

线程: 线程就是进程当中执行的一条路径,也是进程当中的一个控制单元。一个应用程序中一定会有一个线程,这个线程我们叫做主线程。


多线程:  多线程就是一个应用程序中,有多个不同的执行路径。我们就叫做多线程。

多线程场景:迅雷下载、QQ聊天、游戏客户端。提高程序效率


为什么我们用使用多线程?

为了提供程序的运行效率!

2.1如何创建一个线程呢?


创建线程方式一:继承Thread类。

步骤:

1,定义一个类继承Thread类。

2,覆盖Thread类中的run方法。

3,直接创建Thread的子类对象创建线程。

4,调用start方法开启线程并调用线程的任务run方法执行。

主线程的名字就是main。

面试题?使用继承Thread类创建线程好?还是使用实现Runnable创建线程好?
 Runnable接口好?一旦我们继承了Thread类,不能在继续继承,一旦实现了Runnable接口,还可以继续继承类。

练习题 创建两条线程进行交互执行。

package itmayi;
/**
 * 练习题 创建两条线程进行交互执行
 * @author zzq
 *
 */
class ThreadDemo2 extends Thread{
	private String name;
	public ThreadDemo2(String name){
		this.name = name;
	}
	
	public void run(){
		System.out.println(name+"开始执行啦!");
		for (int i = 0; i < 20; i++) {
			System.out.println(name+"线程:i:"+i);
		}
	}
}

public class DemoThread2 {
	public static void main(String[] args) {
		ThreadDemo2 threadDemo = new ThreadDemo2("张三");
		ThreadDemo2 threadDemo2 = new ThreadDemo2("李四");
		
		//threadDemo.run();
		//threadDemo2.run();//顺序执行
		
		threadDemo.start();
		threadDemo2.start();//线程执行
	}
}

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。


新建状态:

ThreadDemo2threadDemo2 = newThreadDemo2("李四");

只是初始化了,还没有调用start方法。

一旦调用start方法,就进入就绪状态。


一旦调用了某个线程,就进入运行状态,执行run方法。






         

/**
 * 演示阻塞和死亡
 * @author zzq
 *
 */
class TestThread extends Thread{
	public TestThread(String threadName){
		super(threadName);
	}
	/**
       * 创建线程执行的代码都放在run方法中
      */
	public void run() {
		for (int i = 0; i < 20; i++) {
			System.out.println("线程名称:"+this.getName()+"i:"+i);
			System.out.println("id:"+this.currentThread().getId()+"线程名称:"+this.getName()+"i:"+i);
			//getName 获取定义的值name
		    //currentThread() 获取唯一的标识  是算法算的不是自己定义的
			if(i==5){
				//(停止状态)
				this.stop();
			}
			try {
				//(阻塞)每隔一秒打印一个i值
				this.sleep(1000);
			} catch (Exception e) {
				
			}
			System.out.println("i:" + i);
		}
	}
}
public class ThreadTest {
	public static void main(String[] args) {
		TestThread  testThread = new TestThread("线程1");
		testThread.start();
		TestThread  testThread2 = new TestThread("线程2");
		testThread2.start();
	}
}

6、获取线程相关信息

CurrentThread():返回当前正在执行的线程对象的引用。

GetId():返回该线程的标识符。

GetName():返回该线程的名称。


class TestThread2 extends Thread{
	public TestThread2(String testName){
		super(testName);
	}
	
	public void run() {
		System.out.println("子线程");
		for(int i =0;i<20;i++){
			//this.getName()是通过构造函数传进来的testName,自动赋值给线程中的name
			System.out.println("线程名称"+this.getName()+"i:"+i);
			/**
			 * this.currentThread()获取当前线程的引用(线程唯一的标识,
			 * id值是多线程算法算的,不是自定义的)
			 * 
			 */
			System.out.println("id:"+this.currentThread().getId()+"线程名称:"+this.getName()+"i:"+i);
			//getName获取定义的值name
			//currentThread()获取唯一的标识 是算法算的不是自己定义的
			if(i==5){
				this.stop();
			}
			try {
				this.sleep(1000);
			} catch (Exception e) {
				
			}
			System.out.println("i:" + i);
		}
	}
}
public class ThreadTest2 {
		public static void main(String[] args) {
			System.out.println("主线程");
			TestThread2 TestThread2 = new TestThread2("线程1");
			TestThread2.start();
			TestThread2 TestThread3 = new TestThread2("线程2");
			TestThread3.start();
		}
}

7、真实企业多线程分批处理数据

什么是多线程?

在一个应用程序中,同时有多个不同的执行路径。

说一下多线程的好处?

提高程序效率。

线程和进程有什么区别?

线程是进程 的一条执行路径,而进程是线程的集合。

什么是线程同步、异步?

线程同步表示,当前线程执行完后下一个线程接着执行。(当有多个线程去共享同一个变量的时候,只让一个线程使用,使用完成之后释放了锁,才能让其他线程使用)

线程异步表示,在一个应用程序中,同时有多个不同的执行路径。(两个代码同时在一起执行)例如javaweb,ajax,android,handler

什么是线程不安全?

当多个线程共享同一个变量的时候,会造成其他线程的干扰,如何解决:使用线程同步技术,用上锁(synchronized).让一个线程执行完了,再让另一个线程执行。

Sleep()和wait()有什么区别?

Sleep是让当前线程指定休眠时间,然后继续工作,不释放锁。

让当前线程wait则是等待,直到有线程通知notify()唤醒他才会重新工作。释放锁





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值