`
gengu
  • 浏览: 84964 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java 多线程

阅读更多

学习一下java多线程

 

实现java多线程主要有实现Runnable接口,实现run方法和继承Thread类。重写run方法。

 

首先说一些这两种实现方式的区别:


①Thread类在API中的定义是这样的,public class Thread extends Object implements Runnable

可以看到,Thread类是实现了Runnable接口 的,Runnable接口中只有一个方法,就是public void run(){}这个方法,而在Thread里面有很多的方法,除了重写了run方法之外还有四个构造方法,public void start(){}等方法。

这就说明这个线程类比这个接口更多的关于线程的操作。


②当我们需要实现一个线程的时候,但恰恰这个时候它已经有了一个父类,由于java是单继承的,所以我们不能再继承一个Thread类了,这个时候就只好实现Runable接口了。


③当我们定义了一个实现了Runable接口的类的对象的时候,我们可以开启多个线程,而实现了Thread类的对象就不行了(它只能调用start方法一次)。

 

线程的执行是随机性的,线程有五种状态:新建,就绪,运行,阻塞,死亡。只有当线程获得了所需要的所有资源并且获得了CPU分配的时间片才能运行,当程序一切就绪之后也不一定会运行。就像下面的程序。

 

package threadTest1;
public class TestThread {
	public static void main(String[] args) {
		test a=new test("A");
		test b=new test("B");
		test c=new test("C");
		a.start();
		b.start();
		c.start();
		}
	}
	class test extends Thread{
		private String name;
		public test(String str){
			this.name=str;
		}
		public void run(){
			System.out.println("我是线程:"+name);
		}
}

它的执行结果是随机的,可能是ABC,也可能是ACB,还可能是BCA==。

我们上课的老师说这样的程序能够顺序执行,其实是不对的。

 

线程的执行 :线程的执行是使用start方法,而不是run方法,run方法只是一个普通方法,真正要实现线程的同步是要使用start方法的。

线程睡眠 :线程可以通过调用sleep方法,这个方法是在Thread类中定义的,线程由运行状态进入睡眠状态,当时间完成之后再次进入等待状态,有人说时间到了就到了运行状态其实是不对的,只能说它到了等待状态等待CPU的调度。

 

中断线程 :终端线程是一个很让我困惑的事情,因为调用了interrupt方法之后线程也没有中断,比如我的程序

package test5;

public class TestThread1 {

	public static void main(String[] args) {
		Thread thread1 = new test();
		thread1.start();
	}
}

class test extends Thread{
	public void run(){
		while(true){
			System.out.println("程序开始运行");
			this.interrupt();
			System.out.println("程序结束运行");
		}
	}
}

程序就真的可以无限运行下去,那他到底有什么用呢?

 

有人的解释是:

在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是让线程停止运行,反而是继续执行线程的手段.

总之大家必须知道它的作用绝不是那么的简单。具体的深入的我将在下一篇博客里讲述。

 

线程中断 :在大多数资料里,因时间片用完而被剥夺CPU的情况我们叫做线程中断。

 

线程等待 :它有两个重载的方法可以将线程切换到等待状态

this.wait();
this.wait(timeout);
this.wait(timeout, nanos);

他们的作用不赘述了,没有参数的这种等待只有在notify方法或者notifyAll才能结束等待。

线程等待与睡眠的区别是:睡眠不会导致资源的释放,而等待可以。其他线程可能得到这些资源。

 

 

分享到:
评论

相关推荐

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    java 多线程操作数据库

    一个java 多线程操作数据库应用程序!!!

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    java多线程的讲解和实战

    详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。

    java多线程通信图解

    一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...

    java多线程处理数据库数据

    java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    Java多线程编程经验

    现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程

    java多线程处理大数据

    java多线程处理大数据,可根据配置的线程数,任务去调度处理

    java多线程并发

    java多线程并发的在新窗口

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程核心技术

    资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...

    java多线程实现大批量数据导入源码

    java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

    java多线程模拟队列实现排队叫号

    java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号

    java多线程进度条

    java多线程进度条

Global site tag (gtag.js) - Google Analytics