单线程,main方法中从到下依次执行程序,安全隐患低,但效率慢。
多线程,相反
线程,程序运行原理:
1,分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
2,抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么随机选择一个线程,java使用的为抢占式调度
线程Thread 是一个没有规则的输出效果
subThread继承父类Thread ,并重写父类中run方法,在run方法中写功能,在测试类ThreadDemo中建立subTHread对象,并调用Thread类中方法run,
创建线程的目的是什么?
是为了建立程序单独的执行路径,让多部分代码实现同时执行,也就是说线程创建并执行需要给定线程要执行的任务。
获取父类线程的方法getName(),是非静态调用,若在静态方法中调用此方法,会报错error
设置线程名字,setName();
NameTread nt = new NameThread();
nt.setName("XXX");
NT.start();
方法:currentThread();此方法获得正在运行的线程对象
Thread t = Thread.currentThread();
syso(t.getName());
实现 Runnable 的好处:
Runnable接口避免了单继承的局限性,所以较为常用,线程分为两部分,一部分线程对象,一部分线程任务,继承Thread类,线程和对象耦合在一起,一旦创建Thread类的子类对象,即使线程对象,又有线程任务,实现runnable接口,将线程任务单独分离出来时封装成对象,类型就是Runnable 接口类型。runnable 接口对线程和线程任务进行解耦。
线程池:
是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源
对线程面临着线程安全问题:
就这售票啦说,一个窗口买100张票,有三种买票的方式,网上,手机,窗口,在三个途径抢占CPU资源的时候,当票只有一张时,当一个途径在处理售票时, 处在休眠状态时,另一个途径抢占到啦CPU资源,这时这个途径就会分配都这张票的销售,接下来也会面临这个问题在另一个途径上,相当于,当票卖出去的时候,会出现有的线程卖出去的是空票。
解决线程安全问题,需要 同步技术synchronized 同步对象,任意对象
对象:同步锁,对象监视器obj
同步保证安全性,没有锁的线程不能执行,只能等
同步锁的作用过程:
线程遇到同步代码块后,线程判断同步锁还有没有,同步锁,有!获取锁进入同步中,去执行了,执行完毕后,出去了同步代码块,线程将锁对象还回去。
在同步中线程,进行了休眠,此时另一个线程会执行,遇到同步代码块,判断对象锁还有没有了,没有锁的线程,不能进入同步中执行,被阻挡在同步代码块外, 加了同步后,线程进同步判断锁,获取锁,出同步释放锁,导致程序运行速度的下降。
锁的对象在不是唯一的情况下,两个线程传递的数据会出现交替现象,所以在线程锁的对象,最好是唯一的
多线程,相反
线程,程序运行原理:
1,分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
2,抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么随机选择一个线程,java使用的为抢占式调度
线程Thread 是一个没有规则的输出效果
subThread继承父类Thread ,并重写父类中run方法,在run方法中写功能,在测试类ThreadDemo中建立subTHread对象,并调用Thread类中方法run,
创建线程的目的是什么?
是为了建立程序单独的执行路径,让多部分代码实现同时执行,也就是说线程创建并执行需要给定线程要执行的任务。
获取父类线程的方法getName(),是非静态调用,若在静态方法中调用此方法,会报错error
设置线程名字,setName();
NameTread nt = new NameThread();
nt.setName("XXX");
NT.start();
方法:currentThread();此方法获得正在运行的线程对象
Thread t = Thread.currentThread();
syso(t.getName());
实现 Runnable 的好处:
Runnable接口避免了单继承的局限性,所以较为常用,线程分为两部分,一部分线程对象,一部分线程任务,继承Thread类,线程和对象耦合在一起,一旦创建Thread类的子类对象,即使线程对象,又有线程任务,实现runnable接口,将线程任务单独分离出来时封装成对象,类型就是Runnable 接口类型。runnable 接口对线程和线程任务进行解耦。
线程池:
是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源
对线程面临着线程安全问题:
就这售票啦说,一个窗口买100张票,有三种买票的方式,网上,手机,窗口,在三个途径抢占CPU资源的时候,当票只有一张时,当一个途径在处理售票时, 处在休眠状态时,另一个途径抢占到啦CPU资源,这时这个途径就会分配都这张票的销售,接下来也会面临这个问题在另一个途径上,相当于,当票卖出去的时候,会出现有的线程卖出去的是空票。
解决线程安全问题,需要 同步技术synchronized 同步对象,任意对象
对象:同步锁,对象监视器obj
同步保证安全性,没有锁的线程不能执行,只能等
同步锁的作用过程:
线程遇到同步代码块后,线程判断同步锁还有没有,同步锁,有!获取锁进入同步中,去执行了,执行完毕后,出去了同步代码块,线程将锁对象还回去。
在同步中线程,进行了休眠,此时另一个线程会执行,遇到同步代码块,判断对象锁还有没有了,没有锁的线程,不能进入同步中执行,被阻挡在同步代码块外, 加了同步后,线程进同步判断锁,获取锁,出同步释放锁,导致程序运行速度的下降。
锁的对象在不是唯一的情况下,两个线程传递的数据会出现交替现象,所以在线程锁的对象,最好是唯一的