进程
定义:应用程序的执行实例(最小单位);有独立的内存空间与系统资源
线程
定义:包含在进程里面;CPU调度与分派的基本单位;执行运算的最小单位,可以完成独立的顺序流程的控制
多线程定义
一个进程当中同时运行了多个线程,用来完成不同的工作,这就叫做多线程
优点
1.充分利用CPU的资源
2.简化编程模型
3.带来良好的用户体验
主线程
main()方法就是主线程的入口
产生其他子线程的线程
必须最后完成,因为他要执行各种的关闭动作
使用线程步骤
1.定义线程
2.创建线程对象
3.启动线程
4.终止线程
创建线程的两种方式
继承Thread类
1.定义MyThread类继承Thread类
2.重写run方法,编写线程执行体
3.创建线程对象,调用start()方法开启线程
public class MyThread extends Thread{
//重写run()方法
public void run(){
for(int i=1;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
// Thread.currentThread() 获取当前线程对象
}
}
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); //启动线程}
}
实现Runnable接口
1.定义MyRunnable类实现Runnable的接口
2.实现run方法,编写线程执行体
3.创建线程对象,调用start()方法启动线程
public class MyRunnable implements Runnable{
public void run(){
for(int i=1;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start(); //启动线程}
}
使用线程的注意点
1.多线程交替执行,并不是一起执行,总有先后但是时间很短,看不出来
2.每次线程执行的时长是由分配的CPU时间片长度决定的
3.开启线程不能用run()方法,用run()只是调用搞线程类的方法,并不是开启线程
线程的状态(生命周期)
1.创建状态
2.就绪状态
3.阻塞状态
4.运行状态
5.死亡状态
线程调度的相应方法
setPriority(int newPriority)--->设置线程的优先级
static void sleep(long millis)--->在指定的毫秒数内让当前正在执行的线程休眠
void join()--->等待该线程终止
static void yield()--->暂停当前正在执行的线程对象,并执行其他线程(不一定会礼让)
void interrupt()--->中断线程,不是真的中断,而是到达某种状态,运行另一段线程;
boolean isAlive()--->测试线程是否处于活动状态
synchronized关键字
作用:用来解决多个线程操作同一共享资源时,将引发的数据不安全的问题(为当前的线程声明一个锁,该类资源等待该线程做完之后其他线程才能访问)
使用方式
1.同步方法
2.同步代码块(锁对象属于实例对象时用this;锁对象属于静态变量时用类名.class)
package threadDome2;
public class QpRunnable implements Runnable {
//多线程抢票
private int count = 20;// 记录总票数
private int num;// 购买的票数
private boolean flag = true;
@Override
public void run() {
while (flag) {
synchronized (this) {
if (count < 1) {
flag = false;
return;
}
count--;
num++;
System.out.println(Thread.currentThread().getName() + "抢了第" + num +
"张票,总票数还剩余" + count + "张票!");
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
线程安全
多线程操作同一事务时可能带来的数据不一致的问题
线程安全与不安全的常用对象
安全
Vector
Hashtable
StringBuffer
效率低,有多低看你锁的量级
不安全
ArrayList
HashMap
StringBuilder
合格的书写多线程
1.对建线程的控制
2.对拒绝建线程提出策略
3.尽量少写线程
本文详细介绍了Java中的多线程概念,包括进程、线程的定义,多线程的优点,主线程的作用,创建线程的两种方式(继承Thread类和实现Runnable接口),线程状态及其生命周期,线程调度的方法,以及synchronized关键字在解决线程安全问题中的应用。通过实例分析,阐述了如何编写安全的多线程程序。
9343

被折叠的 条评论
为什么被折叠?



