1.线程&进程:
</pre><p>进程:应用程序在内存中分配的空间。-负责空间</p><p>线程:负责一个进程当中内容的运算或执行单元,也叫执行路径。-负责执行</p><p></p><p>一个进程中至少有一个线程在负责进程的运行。如果一个进程有多个线程,称改程序为多线程程序。</p><p>eg:运动场-进程。各项运动项目-线程。</p><p></p><p>2.多线程技术-解决问题</p><p>多线程好处:可以使代码同时执行,解决多部分代码同时执行的需求。用户体验相对好一些。</p><p>但是cpu在某一时刻只能处理一条线程。但是我们看到cpu下开展多条线程,cpu在各个线程下快速切换。</p><p>多线程无法提高效率,只可以合理使用cpu资源。</p><p></p><p>3.java多线程-</p><p>多线程运行是由cpu随机快速切换造成的,怎么切换cpu说的算。</p><p>JVM多线程-有两个线程:</p><p>一个自定义代码运行(这个从main方法开始执行的线程),一个是垃圾回收。</p><p>object类,finallize(垃圾回收)system.gc();(垃圾回收启动)</p><p></p><p>线程的任务都封装在特定区域中,eg:主线程运行任务都定义在main方法中,</p><p></p><p>4.通过查阅API文档,java.lang.Thread类</p><p>该类的描述中,有创建线程的两种方法。</p><p>1.继承Thread类。</p><p><span style="white-space:pre"></span>a.继承Thread类,</p><p><span style="white-space:pre"></span>b.覆盖run()方法。</p><p><span style="white-space:pre"></span>c.创建子类对象就是创建线程方法。</p><p><span style="white-space:pre"></span>d.调用Thread类中的start方法,就可以执行线程,并会调用run()方法。 (start:开启线程,运行run()方法。)</p><p></p><p>5.调用start和run方法的区别</p><p>调用start会开启,开启的线程去执行run方法中的线程任务。</p><p>直接调用run,线程并未开启,run方法执行的是主线程。</p><p></p><p>6.线程结束</p><p>线程结束-栈中没有方法,线程就结束了(线程类比游泳道)</p><p></p><p>7.多线程运行状态:</p><p></p><p>8.多线程实例——卖票</p><p></p><pre name="code" class="java">public class SaleTicket extends Thread {
private int tickets=100;
public void run()
{
while(true)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+"*******"+tickets--);
}
}
}
}
class SaleDemo
{
public static void main(String[] args) {
// TODO Auto-generated method stub
SaleTicket t1 = new SaleTicket();
SaleTicket t2 = new SaleTicket();
SaleTicket t3 = new SaleTicket();
SaleTicket t4 = new SaleTicket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
9.实现Runnable
实现Runnable接口的好处,:
1.避免继承Thread类的单继承的局限性
2.Runnable接口出现更符合面向对象,将线程单独进行对象的封装。
3.Runnable接口出现,降低了线程对象和线程任务的耦合性。
所以,以后创建线程都使用第二种方式。
10.多线程安全问题
多线程有随机性,不一定与预期一致。
产生原因:
1.线程任务中有处理共享数据。
2.线程任务中,有多条对共享数据操作。
一个线程在操作共享线程的过程中,其他线程参与操作,造成了数据错误。
解决思想:
只要保证多条操作在共享数据的代码在某一时间,被一条线程所执行,在执行期间不允许其他线程参与运算。
怎样保证?用了同步代码块,
synchronized{
需要同步的代码;
}
同步,在目前情况下只能有一个线程来执行,其他线程进不来,这就是同步锁机制,
好处:解决多线程安全问题。
弊端:降低效率(可以忍受范围内)。
一种情况:安全问题后加入同步机制,之后安全问题依旧。
只要遵守同步前提,就可以解决。
同步的前提:
多个线程,在同步中,必须使用同一个锁,这才是同步。