1.线程:

  a.由来:单任务OS —— 多任务OS

  b.进程:每一个进程对应一个应用程序,分配独立内存空间

  c.线程:线程是进程内部的一个独立的执行分支

  d.特点:共享内容地址空间,切换成本更低

2.线程的创建和启动

  a.方法一:(Thread)

    ①继承Thread类,重写run方法——run方法只负责确定这个线程要做的事情

public class MyThread extends Thread{
public void run() { }
}

    ②开启线程,要调用start方法——该方法会为线程分配资源,然后自动调用this.run()

MyThread mt = new MyThread();
mt.start(); //开启线程

    ③如果调用run方法——不会报错,但只是普通的方法调用,没有开启新线程

  b.方法二:(Runnable)

    ①实现Runnable接口,重写run方法——run方法只负责确定这个线程要做的事情

public class YourThread implements Runnable{
public void run() { }
}

    ②创建一个Thread对象,把Runnable接口的实现类对象传入

     调用Thread对象的start()

YourThread yt = new YourThread();
Thread th = new Thread(yt);
th.start();

3.线程状态

  a.流程:①新建状态(new Thread() 对象)——就绪状态(调用start(),但start()在调用run()之前)——运行状态(start(),调用run())——死亡状态(run()方法结束,进行资源回收清理)

      ②中断状态:在运行状态中,线程由于种种原因没有得到CPU执行

  b.中断状态的五个原因:

    ①线程的优先级:线程优先级共十级,最高为10,最低为1

            优先级高的只是被执行的几率更大,不代表完胜优先级低的

th.setPriority(10);

th.setPriority(Thread.MAX_PRIORITY);

    ②阻塞:由于输入/输出,造成线程进行中断状态(如:Scanner)

    ③休眠:Thread的sleep方法

th.sleep(500);        //传休眠的毫秒数

    ④等待 与 唤醒:Object 的 wait() 与 notify() 方法

    ⑤挂起:Thread 的 yield() 方法

4.同步锁

  a.关键字:synchronized

  b.意义:当多个线程访问同一资源的时候,有可能造成该资源数据混乱。

      为保证该资源每次只能被一个线程使用,使用完以后再交给下一个线程,我们要使用同步技术。

  c.同步的实现:

    ①同步方法:在资源身上加同步关键字synchronized

public synchronized void show(String name){

}

    ②同步块:在调用资源的线程身上使用synchronized

synchronized(this.rs){
this.rs.show(this.getName());
}

  

Java 之 多线程编程的更多相关文章

  1. Java的多线程编程模型5--从AtomicInteger开始

    Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicIn ...

  2. Java网络多线程编程:对象流错误导致Connection reset

    Java网络多线程编程--对象流错误导致Connection reset 在老韩的网络多线程编程实战项目中,发生了如下报错: 服务器端和客户端均发生了报错,在确定相应对象流代码完全没有问题之后,回归定 ...

  3. Java socket 多线程编程 示例

    参照网上代码: 1.工程: 2.代码: Client.java package com.my.socket.test; import java.io.BufferedReader; import ja ...

  4. Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

    1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...

  5. 【持续更新】JAVA面向对象多线程编程的一些tips

    sleep()和wait()的区别 sleep()方法是Thread类的方法,wait()方法是Object类的方法. 调用sleep()方法的过程中,线程不会释放对象锁,睡眠时间一过,就又开始执行. ...

  6. 初识Java多线程编程

    Java 多线程编程 Java给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别 ...

  7. java核心-多线程-Java多线程编程涉及到包、类

    Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ...

  8. Java基础知识➣多线程编程(五)

    概述 Java 给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径.使用多线程也是为了充分的利用服务器资源, ...

  9. Java之旅_高级教程_多线程编程

    摘自:http://www.runoob.com/java/java-multithreading.html Java 多线程编程 Java 给多线程编程提供了内置的支持.一条线程指的是进程中的一条执 ...

随机推荐

  1. docker进入容器的方式

    通过docker创建守护运行(在使用-d参数时)的容器时,容器启动后会进入后台.用户无法看到容器中的信息.某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令.dock ...

  2. iOS 目录的使用

    Table 1-1  Commonly used directories of an iOS app  Directory Description AppName.app This is the ap ...

  3. Linux下安装Flask开发框架

    Flask是开发pythonweb的一个轻量级框架,适合初学者使用,当有了熟练的web基础后,再继续学习高级框架的开发,Linux一般安装好之后都会有python开发环境,给开发带来方便,下面是Fla ...

  4. ffmpeg-20160527-git-bin

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  5. webpack学习笔记一

    主要参考: https://blog.madewithlove.be/post/webpack-your-bags/ 起因: 作为运维狗, 对前端一窍不通但心向往之, 最近做一个Dashboard, ...

  6. 2106 Problem F Shuffling Along 中石油-未提交-->已提交

    题目描述 Most of you have played card games (and if you haven’t, why not???) in which the deck of cards ...

  7. log4net使用

    平时项目里一直都有在使用log4net作为日志记录模块,当时一直都没有去理解log4net的配置文件信息.今天抽出了一点时间来看了看配置文件信息. log4net配置文件信息: <log4net ...

  8. LayoutInflater的inflate函数用法详解

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...

  9. 【leetcode】Kth Largest Element in an Array (middle)☆

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  10. 【Git】笔记2

    来源:廖雪峰 安装git(ubuntu) sudo apt-get install git 创建版本库(repository)  在想生成版本库的文件夹下输入: git init 指定用户名和邮箱 g ...