学习目标:
初步掌握Java多线程
学习内容:
1.基础概念
进程-----运行中的应用程序
线程-----进程的一个元
2.举例
QQ上和多人聊天
3.线程的实现
3.1继承Thread
public class Thread2 extends Thread{
@Override
public void run() {
for(int i=0;i<20;i++)
{
System.out.println(Thread.currentThread()+"jack"+i);
}
}
}
结果验证
public static void main(String[] args) {
Thread2 t1 = new Thread2();
Thread2 t2 = new Thread2();
t1.start();
t2.start();
}
3.2实现Runable
public class Thread1 implements Runnable {
@Override
public void run() {
for(int i=0;i<20;i++)
{
System.out.println(Thread.currentThread()+"Bob"+i);
}
}
}
public static void main(String[] args) {
Thread1 t = new Thread1();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
t1.start();
t2.start();
t3.start();
}
并发验证
4.并发
/*
定义一个可以排序数组的线程类
*/
public class Thread3 extends Thread{
int[] a;
Thread3(int[] a){
this.a=a;
}
@Override
public void run() {
Arrays.sort(a);
}
}
进程实现一:
public static void main(String[] args) {
int a[] = {0,3,1,56,23};
int b[] = {67,34,1,12};
int c[] = {2,34,12,67};
Thread3 t1 = new Thread3(a);
Thread3 t2 = new Thread3(b);
Thread3 t3 = new Thread3(c);
t1.start();
t2.start();
t3.start();
//遍历数组
for(int n:a)
{
System.out.print(" "+n);
}
System.out.println();
for(int n:b)
{
System.out.print(" "+n);
}
System.out.println();
for(int n:c)
{
System.out.print(" "+n);
}
}
结果
并未发生排序
进程实现二:
Thread.sleep(1000);
加入这句语句后就可以遍历完成排序后的数组
public static void main(String[] args) throws InterruptedException {
int a[] = {0,3,1,56,23};
int b[] = {67,34,1,12};
int c[] = {2,34,12,67};
Thread3 t1 = new Thread3(a);
Thread3 t2 = new Thread3(b);
Thread3 t3 = new Thread3(c);
t1.start();
t2.start();
t3.start();
//遍历数组
Thread.sleep(1000);
for(int n:a)
{
System.out.print(" "+n);
}
System.out.println();
for(int n:b)
{
System.out.print(" "+n);
}
System.out.println();
for(int n:c)
{
System.out.print(" "+n);
}
}
结果
4.线程同步----保证线程有序访问资源
synchronized (this){
Arrays.sort(a);
}
5.线程死锁----不恰当的使用线程同步
解决死锁-----尽量使用一个核心模块同步块
6.线程池—是一种线程托管机制,将对应的线程集中托管分配,从而减少创建和启动的线程时间,提高程序的执行速度
学习时间:
2021/1/21
9:00~12:00