Java线程基础(一)

 说在前面,通过一段学习事后,本身发觉线程在Java中占有举足轻重的地位,总以为如此复杂的线程知识点必定要好好理清才好消化,于是有了这篇文章。java

但因鄙人资历尚浅,若有遗漏错误之处还请广大网友不吝赐教。编程

——————————————————————————我是分割线———————————————————————————————————————浏览器

  首先让咱们来梳理一下知识点,理清好脉络才好作题!多线程

 

1、线程基本概念

  咱们先来了解一下什么是线程。并发

  要解释线程,就必须明白什么是进程,那什么是进程呢?若是学过操做系统的同窗应该知道:ide

    进程是指运行中的应用程序,每一个进程都有本身独立的地址空间(内存空间),好比用户点击桌面的IE浏览器,就启动了一个进程,操做系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操做系统将为新的进程分配新的独立的地址空间。目前操做系统都支持多进程。学习

  要点:用户每启动一个进程,操做系统就会为该进程分配一个独立的内存空间。请注意是独立的内存空间。this

    在明白进程后,就比较容易理解线程的概念。spa

    线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的所有资源。一个线程能够建立和撤消另外一个线程,同一进程中的多个线程之间能够并发执行。线程有就绪、阻塞和运行三种基本状态。操作系统

 

线程的特色:

一、线程是轻量级的进程

二、线程没有独立的地址空间(内存空间)

三、线程是由进程建立的(寄生在进程)

四、一个进程能够拥有多个线程-->这就是咱们常说的多线程编程

五、线程有几种状态:

  a、新建状态(new)

  b、就绪状态(Runnable)

  c、运行状态(Running)

  d、阻塞状态(Blocked)

  e、死亡状态(Dead)

Just like this!

BINGO!

  刚才咱们讲到了线程的四大特色,其中最后一条是说一个进程中能够包含多条线程,咱们称这样的线程叫多线程。

那么问题来了,

 

什么是多线程呢?

  若是在一个进程中同时运行了多个线程,用来完成不一样的工做,则称之为“多线程”。
其中最值得咱们注意的是:多个线程其实是交替占用CPU资源,而非咱们表面看起来的并行执行。

 

多线程的好处

  •   充分利用CPU的资源
  •   简化编程模型
  •        带来良好的用户体验

好了,了解了基本知识点以后咱们来介绍介绍Java中有关线程建立经常使用到的类

 

线程的建立

首当其冲的要说的即是咱们的Thread类

  Java提供了java.lang.Thread类支持多线程编程

这是一种最简单的建立线程的方法,值得注意的是这里的类是继承了Thread父类的。

public class ThreadDemo extends Thread{
	@Override
	public void run() {
		for(int i=0;i<=20;i++){
			System.out.println(i+".你好,来自线程"+
		Thread.currentThread().getName());
		}
	}
	public static void main(String[]args){
	ThreadDemo t1=new ThreadDemo();
	t1.start();//线程的启动方法
	ThreadDemo t2=new ThreadDemo();
	t2.start();
	}
}

  

  直接new明显是一个简单快捷的办法,但有时候咱们为了传入某种参数或是为了约束对象类型每每会在new ***()中加入咱们的参数或类型名称,这些也是应当掌握的,在稍后面的代码中会有关于这一现象的描述。

 

  除了使用直接继承Thread类之外,咱们还能够定义MyRunnable类实现Runnable接口,而后完成如下四步操做便可

    1. 实现run()方法;
    2. 编写线程执行体;
    3. 建立线程对象;
    4. 调用start()方法启动线程。
public class RunnableDemo implements Runnable {
	@Override
	public void run() {
		for(int i=0;i<=100;i++){
			System.out.println(Thread.currentThread().getName()+"-->"+i);
		}
	}
	public static void main(String[] args) {
		RunnableDemo rd1=new RunnableDemo();
		Thread t1=new Thread(rd1);
		t1.start();
		RunnableDemo rd2=new RunnableDemo();
		Thread t2=new Thread(rd2);
		t2.start();
	}
}

  看起来是否是比Thread类更复杂一点呢,其实也就是在new完RunnableDemo以后还要将这一新建对象放进Thread方法中。

那么,这二者的区别又是什么呢?

1、继承Thread类
  编写简单,可直接操做线程
  适用于单继承
2、实现Runnable接口
  避免单继承局限性
  便于共享资源

虽然建立了诸多线程,可是若是没有主线程的运行仍然只是一条没有梦想的咸鱼(笑)

 

主线程
  main()方法即为主线程入口
  产生其余子线程的线程
  必须最后完成执行,由于它执行各类关闭动做

 

 

 

好了,有了主线程的帮助,咱们的线程终于可以跑起来了,但会不会有其余的异常出现,或者还有没有其余更复杂的线程实例,

因为学习上的其余事情,我决定下次有时间再写,欢迎关注我,我将持续更新学习进度!作一个有梦想的咸鱼!

——————————————————未完待续——————————————————————————————————

相关文章
相关标签/搜索