进程与线程
正在运行的程序称之为进程。进程它是系统分配资源的基本单位。
线程,又称轻量级进程(Light Weight Process)。
线程是进程中的一条执行路径,也是CPU的基本调度单位。
若一个程序可同一时间执行多个线程,就是支持多线程的.
一个进程由一个或多个线程组成,彼此间完成不同的工作(任务),
同时执行,称为多线程。
充分利用了cpu,提高了程序的效率。
实现线程的三种方式中,自己的runnable和callable类均需要实现相应的接口,继承thread类方式是用的继承,相对较局限,因为一个类只能继承一个父类但可以实现多个接口。
主函数
/*线程试验步骤*/ /*1.创建一个线程对象*/ /*2.调用start()方法启动线程*/ /*3.调用run()方法*/ /*4.使用join()方法等待线程结束*/ /*5.使用yield()方法让出cpu资源*/ /*6.使用sleep()方法让出cpu资源*/ /*7.使用setPriority()方法设置线程优先级*/ /*8.使用setDaemon()方法设置守护线程*/ /*9.使用interrupt()方法中断线程*/ /*10.使用isAlive()方法判断线程是否存活*/ /*11.使用isInterrupted()方法判断线程是否被中断*/ /*12.使用currentThread()方法获取当前线程*/ /*13.使用getId()方法获取线程id*/ /*14.使用getName()方法获取线程名称*/ /*15.使用setName()方法设置线程名称*/ /*16.使用getPriority()方法获取线程优先级*/ /*17.使用getState()方法获取线程状态*/ /*18.使用getThreadGroup()方法获取线程组*/ /*19.使用getStackTrace()方法获取线程堆栈*/ /*20.使用setDaemon()方法设置守护线程*/ /*21.使用setUncaughtExceptionHandler()方法设置异常处理器*/ /*22.使用getUncaughtExceptionHandler()方法获取异常处理器*/ /*23.使用setContextClassLoader()方法设置上下文类加载器*/ /*24.使用getContextClassLoader()方法获取上下文类加载器*/ /*25.使用setDefaultUncaughtExceptionHandler()方法设置默认异常处理器*/ /*Callable线程需要利用FutureTask创建线程任务*/ MyCallable my=new MyCallable(); FutureTask futureTask=new FutureTask(my); Thread t=new Thread(futureTask); t.start(); Object o=futureTask.get(); System.out.println(o); MyThread myThread=new MyThread(); myThread.start(); MyRunnable myRunnable=new MyRunnable(); Thread t1=new Thread(myRunnable); t1.start(); t1.setName("myRunnableNew"); System.out.println("newRunnable: "+t1.getName()); t1.run(); //runnable与Callable的区别 //runnable没有返回值,callable有返回值 //runnable没有抛出异常,callable可以抛出异常 //runnable没有返回值类型,callable有返回值类型 //runnable没有泛型,callable有泛型
MyCallable.java
public class MyCallable implements Callable { @Override public Object call() throws Exception { /*1000以内3的倍数的和*/ int sum = 0; int i=3; while (i<1000){ sum+=i; i+=3; } return sum; } }
MyRunnable.java
public class MyRunnable implements Runnable{ @Override public void run() { System.out.println("Thread name: RunnableThread:" + Thread.currentThread().getName()); } }
MyThread.java
public class MyThread extends Thread { public void run() { System.out.println("MyThread"); } }