Java 初学者-多线程总结
今天对多线程进行了总结。
1.什么是进程与线程?
进程是一个应用程序,一个进程是一个软件
线程是一个进程的执行单元
一个进程可以执行多个线程
2.JVM是一个进程
当在doc命令窗口界面下输入java helloworld后
会先启动JVM,JVM再启动一个主线程调用main方法
同时启动一个垃圾回收线程看护,回收垃圾
3.进程就是公司,线程就是员工
两个进程之间内存独立,不共享。(两个公司)
例如:QQ
微信
两个线程之间
线程A与线程B的堆内存和方法区内存共享
栈内存独立
假如启动多个线程,会有多个栈空间。
每个栈之间互不干扰,这就是多线程并发
因此会提高效率
(一个火车站(进程),多个售票窗口同时售票(多线程))
3.使用多线程之后,main方法结束,程序不一定结束,只是主栈空了。
其它线程可能仍运行。
4.单核CPU可以做到真正的多线程并发吗?
多核CPU可以做到真正的多线程并发。
真正的多线程并发?
T1线程运行不影响T2线程。
T1执行t1的,t2执行t2的。
单核cpu只有一个大脑?
不能真正的多线程并发,线程A播音乐,线程B玩游戏。
A,B线程可以频繁切换。因此类似于多线程。
5.java语言中实现多线程的两种方式。
Java支持多线程机制
第一种方式:直接继承thread,重写run()方法
定义线程类:public Mythread extends Thread{
public void run(){}
}
创建线程对象
MyThreaf t=new MyThread();
启动run方法
t.start();
方法二:编写一个类实现java.lang.Runnable()接口,实现run方法
//定义一个可运行的类
class MyRunnable implements Runnable{
Public void run(){}
}
MyRunnable r=new MyRunnable();//创建一个可以运行的对象
Thread t=new Thread(r);
t.start();//启动线程
注意:第二种方式使用比较较多,不仅可以继承接口,还可以继承类
6.线程的生命周期:
新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
7Thread.sleep()让当前线程进入休眠
8.线程调度模型
1.抢占式:那个线程的优先级较高,那个线程抢占cpu时间片的概率就高(java)
2.均分式:平均分配cpu的时间片,每个线程的执行时间一样。
9.关于多线程并发时,数据的安全问题?
以后,我们的项目都是运行在服务器中,而服务器将线程的定义,线程的创建,线程的启动都已经完成,我们不需要编写。
最重要的是,你需要关注在多线程运行环境下,那些数据是要安全的。
9.1什么时候会存在安全问题?
1.多线程并发。
2.共享数据。
3.共享数据有修改行为。
9.2.如何解决线程安全问题>
线程排队执行.(不能并发)
这种机制叫做:线程同步机制。数据安全再谈效率。
9.3同步与异步编程模型?
异步编程模型:线程t1,t2各自执行各自的谁也不需要等谁。(并发)
同步编程模型:线程t1执行的时候必须等待t2线程执行结束。T2必须等待t1.(排队)
9.4
run和main方法各自执行各的,互不干扰
第二种方式实现多线程
编写一个类实现java.lang.Runnable()接口,实现run方法
//定义一个可运行的类
class MyRunnable implements Runnable{
Public void run(){}
}
MyRunnable r=new MyRunnable();//创建一个可以运行的对象
Thread t=new Thread(r);
t.start();//启动线程
明天计划学习一下html。