java中创建多线程主要是三种方式,1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.实现Callable接口,重写call方法。最常用的是前两种,很多书上都提到2方式上的优势,理由是方便实现资源共享,代码和数据的分离,更好体现面向对象思想。实际上,我认为这两种没有太大区别,通过线程同步两者基本没什么差别,看个人习惯而已。
继承方式创建多线程:
public static void main(String [] args){
System.out.println("main thread is running");
class NewThread extends Thread{
System.out.println(Thread.currentThread().getName()+"is running");
public class ThreadDemo{
public static void main(String [] args){
new NewThread().start();
while(true){
System.out.println("main thread is running");
}
}
}
class NewThread extends Thread{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+"is running");
}
}
}
public class ThreadDemo{
public static void main(String [] args){
new NewThread().start();
while(true){
System.out.println("main thread is running");
}
}
}
class NewThread extends Thread{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+"is running");
}
}
}
Thread(Runnable target)是Thread类的构造方法,Runnable参数为接口类;
public static void main(String [] args){
ThreadRunable runableDemo = new ThreadRunable();
Thread newThread = new Thread(runableDemo);
System.out.println("main thread is running");
class ThreadRunable implements Runnable{
System.out.println(Thread.currentThread().getName()+"is running");
public class ThreadMain{
public static void main(String [] args){
ThreadRunable runableDemo = new ThreadRunable();
Thread newThread = new Thread(runableDemo);
newThread.start();
while(true){
System.out.println("main thread is running");
}
}
}
class ThreadRunable implements Runnable{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+"is running");
}
}
}
public class ThreadMain{
public static void main(String [] args){
ThreadRunable runableDemo = new ThreadRunable();
Thread newThread = new Thread(runableDemo);
newThread.start();
while(true){
System.out.println("main thread is running");
}
}
}
class ThreadRunable implements Runnable{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+"is running");
}
}
}