public class Test {
public static void main(String[] args) {
// 创建账户对象(只创建1个)
ThreadDemo demo= new ThreadDemo();
// //创建俩个线程,执行一个方法(并发)
new Thread(demo).start();
new Thread(demo).start();
}
}
==============================================================================
public class ThreadDemo implements Runnable{
private int sum=100;
@Override
public void run() {
// while (true){
// name();//锁机制
// }
name();//锁机制
}
/**
* 同步方法
*/
public synchronized void name(){
while (true){
if (sum>0){
System.out.println("卖票"+sum);
--sum;
}else {
break;
}
}
}
}
/**
* 多线程;
* 三种获取多线程方式:1.继承Thread 2.通过 Callable 和 Future 创建线程。 3.实现Runnable接口
* 三种创建多线程常用方法:1.匿名内部类new Thread(){} 2.继承Thread,创建类 3.实现Runnable接口
* 获取当前线程的名称:Thread.currentThread().getName()
* Thread.sleep 睡眠
*多线程好处:
* 1.多个线程执行,互不影响,一个挂了,另一个继续执行,
* 2.多线程并发执行,一个卡住,另一个继续执行,速度比单线程快
* 多线程出现安全问题的情况:出现共享数据会有线程安全问题,
* 解决线程安全问题:三种同步方法:1.同步代码块 2.同步方法 3.锁机制
* 1.synchronized (锁对象){需要同步操作的代码}
* 锁对象作用:把同步代码块锁住,只让一个线程执行(同步中的线程,没用执行完毕,不会释放锁,同步外的线程,没用锁进不去同步)
* 缺点:频繁判断,访问锁,归还锁,耗时长,占内存
* 优点:保证了安全
* 2.同步方法:方法为同步synchronized,| public synchronized demp(){需要同步的方法} ,同步方法的锁对象为实现对象 ||还有静态同步方法(了解即可)静态锁对象为本类.class
* 3.Lock锁: ReentrantLock lock = new ReentrantLock(); 在出现安全代码之前加 lock.lock();在出现安全代码之后加 loke.unlock(); 最好放在finally种
* 理解:多线程就是,多个线程(Thread)共享一个事件(可以指方法(金额),类(事件))
*/