进程:
正在运行的程序
是系统进行资源分配和调用的独立单位
每一个进程都有他自己的内存空间和系统资源
进程指当前正在执行的程序,代表一个应用程序在内存中的执行区域
线程:
正在运行的程序下的执行单元,或者说是一条执行路劲
单线程:程序中只有一个执行单元,或者说只有一条执行路劲
多线程:程序中只有多个执行单元,或者说有多条执行路劲
java实现多线程的
方式1:继承Thread
步骤
1.继承Thread
2.重写run
3.创建线程对象
4.调用start方法启动线程
注意:run用于封装被线程执行的代码,直接调用相当于普通方法(单线程)
start用于启动线程,由JVM执行线程
一、
MyThread myThread = new MyThread();
MyThread myThread = new MyThread("兔子1");
二、
带有内部类的
Test test = new Test();
Add add=test.new Add();
Div div=test.new Div();
Thread thread = new Thread(add);
thread.start();
thread=new Thread(div);
thread.start();
多线程的随机性
每个线程都由CPU(一个)处理,CPU一次只能处理一个线程,而多线程的同时执行,只是在我看看来是同时执行。本质上是CPU快速切换实现的,只是切换时间非常短可以忽略不计(可以认识是同时)
实现多线程:
方式二:实现Runnable接口
定义一个类实现Runnable类
在类中重写run方法
创建类的对象
创建Thread对象,把类的对象作为构造方法的参数
启动线程
一、
sale sale = new sale();
Thread thread = new Thread(sale);
二、实现接口的,也可以在创建对象时给名称
Cross c = new Cross();
Thread thread1 = new Thread(c,"person1");
多线程的实现方式:
继承Thread类
实现Runnable接口
实现Runnable的好处:
避免了Java的单继承的局限性
适合多个线程去同时处理同一个资源
资源共享的问题
出现相同票数
出现负数票
原因:
多线程的随机性导致(run()的操作不完整)
如果判断出现数据安全问题
1.多线程
2.资源共享
3.多语句操作共享的数据
数据安全问题出现的本质原因:
多线程的随机性导致run方法中多语句操作共享数据,操作执行的不完整
如果解决:
让操作执行完整
用锁把操作锁起来,同一时间只能有一个线程执行这个操作