这是一道典型的java多线程面试题。开路代码之前要明白什么是线程,什么是进程。
通俗来讲,进程就是两个不同的工程,比如说你同时登陆的QQ和YY,他们之间的数据资源和地址空间不是共享的,这两个进程是单独存在的。而线程是基于进程下的,可以同时
进行,多个进程之间的数据资源和地址空间是共享的,所以为了避免各种可预见和不可预见的错误发生,我们一般都都会给线程间加同步或者互斥进行处理。
java中实现多线程有两种方式,一种是继承Thread类,调用start(),调用一种是实现Runnable接口,重写run()。多线程间可以使用synchronized锁互斥
其实上述都是废话,凑篇幅而已,现在我们写一个最简单的多线程示例,开撸代码。
public class Test {
private int j;
public static void main(String[] args){
Test tt = new Test();
// 内部类的实例化
Inc inc = tt.new Inc();
Dec dec = tt.new Dec();
// 创建 2*n 个线程 此处 n=2
for (int i = 0; i < 2; i++) {
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName() + "-inc:" + j); //Thread.currentThread()当前thread对象。getName()为对象名称。
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName() + "-inc:" + j);
}
class Inc implements Runnable {
public void run() {
for (int i = 0; i < 100; i++) {
inc();
}
}
}
class Dec implements Runnable {
public void run() {
for (int i = 0; i < 100; i++) {
dec();
}
}
}
}
参考文献:http://skyuck.iteye.com/blog/540660