-
简述进程与线程,并说明区别。
答:
进程:应用程序执行的实例,有独立的内存空间和系统资源。如正在运行的QQ和浏览器等
线程:cpu调度和分派任务的基本单位,是进程执行运算的最小单位,也可以说是一个执行路径。在cpu上运行的是线程
区别与联系:
1.同一个进程的线程,共享进程的资源。
2.一个进程至少有一个线程。 -
在Java中,如何解决代码中的线程安全问题。
答:用线程同步机制。用syncronized修饰。 -
演示同步问题,并解决。
答:
HomeWork1演示线程安全问题的代码
HomeWork2演示解决线程安全的代码
/**
* 3. 演示同步问题。
* 需求:演示火车站售票系统未使用同步机制的线程问题。
* author liu
* version 11.26
*/
package HomeWork;
public class HomeWork1 {
public static void main(String[] args) {
Thread t1;
Thread t2;
Thread t3;
Runnable r=new Runnable(){
public void run(){
int ticket=100;
while(ticket>0){
try {
Thread.sleep(100);
System.out.println("***************");
System.out.println(Thread.currentThread().getName()+"卖出第"+ticket+"票");
--ticket;
System.out.println(Thread.currentThread().getName()+"还剩下"+ticket+"张票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t1=new Thread(r);
t1.setName("售票窗口一");
t2=new Thread(r);
t2.setName("售票窗口二");
t3=new Thread(r);
t3.setName("售票窗口三");
t1.start();
t2.start();
t3.start();
}
}
/**
* 3. 演示同步问题,并解决。
* 需求:利用线程同步机制解决火车票出现的线程安全问题。
* author liu
* version 11.26
*/
package HomeWork;
public class HomeWork2 extends Thread{
private int tickets=100;
@Override
public void run() {
while(true){
synchronized (Object.class){
if (tickets<=0){
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("***************");
System.out.println(Thread.currentThread().getName()+"卖出第"+tickets+"票");
--tickets;
System.out.println(Thread.currentThread().getName()+"还剩下"+tickets+"张票");
}
}
}
public static void main(String[] args) {
HomeWork2 hw=new HomeWork2();
Thread t1=new Thread(hw);
t1.setName("售票窗口一");
Thread t2=new Thread(hw);
t2.setName("售票窗口二");
Thread t3=new Thread(hw);
t3.setName("售票窗口三");
t1.start();
t2.start();
t3.start();
}
}