javase之并发(1)

开始重新学习并发,虽然以前也没怎么好好学........准备看java核心技术卷一来自学

so,首先,需要了解多线程和多进程之间的区别,多进程的进程数目并不由CPU数目制约,而是操作系统将CPU的时间分配给进程,

多线程则在较低的层次上扩展了多任务的概念,一个程序可以同时处理多个任务,则每个任务为一条线程。

进程和线程的本质区别:每个进程拥有自己的一整套变量,而线程则共享数据

同时,线程更轻量级,创建,撤销一个线程比启动新进程的开销小很多

1.认识Thread

1.1 Thread实现了Runnable接口

Runnable

@FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

Runnable很简单,只有一个函数run(),是一个函数式接口
Thread的构造方法

Thread() 
分配新的 Thread 对象。
Thread(Runnable target) 
分配新的 Thread 对象。
Thread(Runnable target, String name) 
分配新的 Thread 对象。
Thread(String name) 
分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target) 
分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target, String name) 
分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup group, String name) 
分配新的 Thread 对象。

emmm,我就用过前两个,监介

接下来是Thread的常见方法

static void sleep(long millis)

void start()

void run()

static void yield()
暂停该线程,并执行其他线程
void join()
等待该线程终止

public final boolean isDaemon()

void interrupt()
向线程发送中断请求,线程的中断状态被设置为true,若当前线程被一个sleep调用阻塞,那么会抛出异常

static boolean interrupted()

boolean isInterrupted()

static Thread currentThread()

Thread.State getState()

2.线程状态

  • New(新创建,但还未运行,new Thread())
  • Ruunable(调用了start()方法,一个可运行的线程可能在运行也可能没在运行,取决于操作系统给线程提供的运行时间)
  • Blocked(当一个线程试图调用一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态)
  • Waiting(当线程调用sleep()或wait(),或者等待concurrent库中的Lock或Condition时,就会进入等待状态)
  • Timed Waiting(当等待状态有一个超时参数时,就是计时等待状态)
    *Terminated(1.run()方法正常退出 , 2.因为一个没有捕获的异常终止了run()方法)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android Handler机制系列文章整体内容如下: Android Handler机制1之ThreadAnd...
    隔壁老李头阅读 14,290评论 24 97
  • 一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6....
    GT921阅读 4,601评论 0 3
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,190评论 1 15
  • 关于测试用例 我比较赞同老徐的观点,思维导图写测试点(因为公司只有我一个测试)。测试用例我有段时间写过但是效果很差...
    启鸣Simon阅读 786评论 2 1
  • 五月五日我过了我在高中的第一个生日,当然也是第一次和同学们一起。小激动有一点,小开心有一点,小失落有一点——这是一...
    lhy123丶阅读 1,748评论 0 0