1.java 进程和线程
在这里说出自己简单的理解,比如一个项目的启动这个属于一个进程,项目中每个操作都是一个线程,一个进程至少含有一个线程,可以含有多个线程,在处理很多数据的时候,我们可以开启多个线程同时执行,其实这里的同时执行也只是一个轮换的执行并不是真正意义的同步。
2.开启线程的两种方式
2.1 继承Thread 类
test extends Thread{
run()
{
----------------------------
}
main()
{
new test().start();
}
}
2.2 实现Runnable接口
test immplent Runnable
{
run(){}
main()
{
new Thread(new test()).start();
}
}
3.怎么终止一个处于阻塞的线程
老的方式stop 已经被淘汰,现在方式interrupt ,其实可以通过底层代码发现,interrupt并不是真正的去停止现场,只是改变interrupt的状态值
所以我们并不是调用这个函数就万事大吉了,下面例子
public class ThreadInterrupted implements Runnable {
public static void main(String[] args) {
//将任务交给一个线程执行
Thread t = new Thread(new ThreadInterrupted());
t.start();
//运行一断时间中断线程
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("****************************");
System.out.println("Interrupted Thread!");
System.out.println("****************************");
t.interrupt();
}
@Override
public void run() {
try {
//检查程序是否发生中断
while (!Thread.interrupted()) {
System.out.println("I am running!");
//point1 before sleep
Thread.sleep(20);
//point2 after sleep
System.out.println("Calculating");
/* for (int i = 0; i < 900000; i++) {
System.out.println(i);
} */
}
} catch (InterruptedException e) {
System.out.println("Exiting by Exception");
}
System.out.println("ATask.run() interrupted!");
}
}
以上是一种终止线程的方式,同时也可以只用 Thread.sleep()来实现终止现场,因为sleep方法抛出一个异常 throws InterruptedException; 我们当调用过现场的Interrupt方法之后,try{
thread.sleep();
}catche( InterruptedException)
{
System.out.println("线程中断“)
}
这种方式同样也可以终止一个已经调用过Interrupt 的线程
以上是自己的简单理解