十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
创建线程,就是这样
创新互联建站主要从事做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务晋宁,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
extends Thread 或者 implements Runnable,但是有很多问题;
所以引申出了下面的线程池
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,
若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,
保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:
1)继承Thread类创建线程
2)实现Runnable接口创建线程
3)使用Callable和Future创建线程
4种。
1、匿名内部类形式。例:
Thread t = new Thread(new Runnable(){
//代码
});
t.start();
2、该类实现Runnablef接口。例子:
public class MyThread implements Runnable{
Thread t = new Thread(this);
t.start();
public void run(){ //启动线程自动调用此方法
}
}
3、其他类实现Runnable接口。例子:
public class MainThread{
Thread thread = new Thread(new GetThread());
thread.start();
}
class GetThread implements Runnable{
public void run(){ //启动线程自动调用此方法
}
}
4、内部类实现Runnable接口。例子:
public class ManClass{
Thread t = new Thread(new RunnableClass());
t.start();
class RunnableClass implements Runnable{
public void run(){ //启动线程自动调用此方法
}
}
}
java创建线程的方式有三种\x0d\x0a第一种是继承Thread类 实现方法run() 不可以抛异常 无返回值\x0d\x0a第二种是实现Runnable接口 实现方法run() 不可以抛异常 无返回值\x0d\x0a第三种是实现Callable接口,接口中要覆盖的方法是 public call() 注意:此方法可以抛异常,而前两种不能 而且此方法可以有返回值\x0d\x0a\x0d\x0a第三种如何运行呢 Callable接口在util.concurrent包中,由线程池提交\x0d\x0aimport java.util.concurrent.*;\x0d\x0aExecutorService e = Executors.newFixedThreadPool(10); 参数表示最多可以运行几个线程\x0d\x0ae.submit(); 这个里面参数传 实现Callable接口那个类的对象
package test;
import java.util.*;
public class Threadtest extends Thread{
int pauseTime;
String name;
public Threadtest(int time,String n){
pauseTime = time;
name = n;
}
public void run(){
Calendar now;
now = Calendar.getInstance();
System.out.println(name+now.get(Calendar.MINUTE)+now.get(Calendar.SECOND));
try{
Thread.sleep(pauseTime);
}catch(Exception e){
e.getStackTrace();
}
Threadtest2 myt1 = new Threadtest2(5000,"threadin;;");
myt1.start();
}
public static void main(String[] args){
Threadtest myt1 = new Threadtest(2000,"thread1;;");
myt1.start();
Threadtest myt2 = new Threadtest(1000,"thread2;;");
myt2.start();
}
}
class Threadtest2 extends Thread{
int pauseTime;
String name;
public Threadtest2(int time,String n){
pauseTime = time;
name = n;
}
public void run(){
Calendar now;
now = Calendar.getInstance();
System.out.println(name+now.get(Calendar.MINUTE)+now.get(Calendar.SECOND));
try{
Thread.sleep(pauseTime);
}catch(Exception e){
e.getStackTrace();
}
}
}
线程用到Thread或者Runnable接口(Thread也操作了Runnable接口)
继承了Thread类后需要重载其run方法,在方法里写你需要完成的事情,开始线程是调用其start方法。
操作Runnable接口必须实现其run方法,在方法里写你需要完成的事情,Runnable接口没有start方法,所以启动线程还是需要依靠Thread类 new Thread(Runnable runnable).start();
一般项目中多是操作接口,因为类只能单继承,接口可以操作多个。