多线程概念、案例!

1:线程的概念
进程(任务):一个正在运行的程序
进程的调度:CPU来决定什么时候该运行哪个进程 (时间片轮流法)


1.2 线程和进程的关系
a:一个进程可以创建多个线程
b:线程必须依赖于进程而存在
c:多个线程共享进程的空间
d:进程和线程得到CPU的机会是均等的‘
1.3 为什么要搞多线程
我们可以让程序同时执行(并发执行)

//Java只让我们创建线程,而不让我们创建进程

HelloWorld.java
javac HelloWorld.java
java HelloWorld --->JVM 启动进程 
Run Application --->JVM 启动进程

//一个进程中至少要有一个线程
main方法 被称为 主线程
2: 线程的创建方式
Thread 类
方式1:继承Thread类
1:自定义一个类,继承Thread类
2:重写Thread类的run方法
3:创建自定义类对象
4:让自定义类对象调用start方法,启动线程


class MyThread extends Thread{
public void run(){
//在此写你线程要执行的代码(木马查杀)
}
}
//-----------------
MyThread mt = new MyThread();
mt.start(); //启动线程----->系统会自动调用run方法
2.2 线程中的小方法
public static void sleep(long millis)//线程执行到该语句,就会休眠---》让出CPU
public static void yield() // 线程的礼让 线程执行到该语句 线程会将CPU的执行权主动让出
// 让线程执行的更加均匀
public final void setPriority(int newPriority) //设置线程的优先级


创建线程的方式二:实现接口Runnable
步骤 :
1:自定义类实现Runnable接口
2:重写run方法
3: 创建自定义对象
4:创建Thread类对象,并将自定义类对象作为参数传入Thread类
5: 通过Thread类对象调用start方法启动线程

class MyRunnable implements Runnable
{
public void run(){
//线程要执行的内容
}
}

//----------------
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();//启动线程,系统会自动执行MyRunnable中的run方法

 

3: 线程的同步(线程的安全)
a:同一张票被卖了多次
b:出现了负票问题

线程的同步有三种实现方法:
a: 同步代码块
b: 同步方法
c: Lock锁

3.1 同步代码块
synchronized (锁对象) //可以是任何一个对象,必须保证线程共享这个对象
{
//存放你要加锁的代码    
}
3.2 同步方法
//同步方法的锁对象是this
//静态方法的锁对象是类的Class对象
public synchronized void sellTickets(){
}

3.3 两者的区别
synchronized (锁对象) 
{
xxxxx
yyyyy
zzzzz
sssss
ttttt    
}

public synchronized void sellTickets(){
xxxxx
yyyyy
zzzzz
sssss
ttttt    
}


//---------------
public void method(){
xxxxx
yyyyy
synchronized (锁对象) {
zzzzz
sssss
ttttt    
}
}
//同步方法,用户不能只指定锁对象,默认都是this
//同步代码块,自己可以指定锁对象,锁对象可以是任何对象,只要线程共享即可

3.4 Lock锁
Lock:
ReentrantLock 
lock(); 加锁
unlock(); 解锁

1:创建ReentrantLock对象
2:在适当的地方加锁
lock()
2:在适当的地方解锁
unlock();

 
原文地址:https://www.cnblogs.com/qiqimu/p/7635583.html