在Java中实现多线程有2种方法:
1.继承Thread
public class ThreadDemo extends Thread { String name; private int count = 100; // 使用Thread类的有参数的构造函数 ThreadDemo(String name) { this.name = name; } public void run() { // compute primes larger than minPrime for (int i = 0; i < 100; i++) { calcCount(); System.out.println("线程开始:" + this.name + ",i=" + i + ",count=" + count); } // System.out.println(name); } private synchronized void calcCount() { if (count > 0) { count--; } } public static void main(String[] args) { ThreadDemo td = new ThreadDemo("1"); ThreadDemo td2 = new ThreadDemo("2"); ThreadDemo td3 = new ThreadDemo("3"); td.start(); td2.start(); td3.start(); } }
2.实现Runnable接口
public class RunnableDemo implements Runnable{ String name; RunnableDemo(String name) { this.name=name; } @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<100;i++){ System.out.println("线程开始:"+this.name+",i="+i); } } public static void main(String[] args){ RunnableDemo rd=new RunnableDemo("1"); RunnableDemo rd2=new RunnableDemo("2"); RunnableDemo rd3=new RunnableDemo("3"); new Thread(rd,"ww").start(); new Thread(rd2).start(); new Thread(rd3).start(); } }
这两种方式都可以正常完成多线程的处理,网上讲述:一般情况下使用多线程是用业务类实现Runnable接口。
看下Thread的定义:
public class Thread implements Runnable{...}
我们就知道Thread其实就是Java里面对Runnable的官方实现,如果我们不需要特别的控制的话,直接用Thread就可以了。
情况有点类似List的实现,我们在Java中用ArrayList就可以了,当然你也可以自定义一个List的实现类出来。。。。
资源同步
使用多线程就不得不提到线程同步,为了访问有限资源,对资源上锁是一件必须的操作步骤。当然上锁也是一件耗费系统资源的事情,需要在开发时做一些取舍。
常用上锁方法有 synchronized 、lock,可以简单认为是自动化和手工处理的差别。
对同步讲的较多的是:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html