线程:

  • 定义:线程是程序内的一个单一的顺序控制流程,也被称为“轻型进程(lightweight process)” 或“执行上下文(execution context )”
  • 线程用于分隔任务
  • 线程类似于传统的顺序程序,都有一个执行的起点,经过一系列指令后到达终点。线程在执行过程中的任何时刻只能有一个执行点
  • main()是一个特殊的线程

实现方法:

1.继承Thread

2.实现runnable接口

启动方式:

1.start() 交叉执行线程,一个等待即执行下一个,各个线程的xc1.start();

xc2.start();

xc3.start();

执行并不是顺序的,谁先获取cpu执行谁

2.run()  顺序执行线程,一个执行完才能执行下一个

线程共享资源:

设置为static静态

线程状态:

创建

就绪

执行

阻塞

死亡

线程通信:

线程常用方法:

Thread.currentThread().getName();获取正在执行的线程的名字

//主动放弃cpu执行权的三种方法

Thread.yield();thread的静态方法,当前执行线程放弃cpu执行权进入就绪态;

Thread.sleep(t); thread的静态方法,睡眠一段时间,进入阻塞态,时间到自动进入就绪态;

wait([t]);Object方法等待【一定时间】进入阻塞态,等待唤醒

notify()唤醒持有指定锁阻塞状态的线程任意一个,进入就绪

notifyAll()唤醒持有指定锁阻塞状态的所有进程,进入就绪

stop()终止线程

thread.setPriority(1--10);//线程优先级,1—10越来越大,只是提高获取cpu的概率,并不是优先级高的绝对先获取cpu

继承Thread过程

1.创建一个类继承Thread

2.重写Thread中的run方法 (创建线程是为了执行任务     任务代码必须有存储位置,run方法就是任务代码的存储位置。)thread里的run()可以调用其他方法

3.创建子类对象,其实就是在创建线程

4.启动线程start()或者run()

这种方式的特点(缺陷):线程任务和线程是绑定在一起的。

实例:

class Ticket extends Thread{

private static int num = 50; //定义成static,四个线程共享50张票。

public void run() {

while(num>0)

System.out.println(Thread.currentThread().getName()+"...sale..."+num--);

}

}

class Maipiao{

public static void main(String[] args) {

Ticket win1 = new Ticket();

Ticket win2 = new Ticket();

Ticket win3 = new Ticket();

Ticket win4 = new Ticket();

win1.start();

win2.start();

win3.start();

win4.start();

}

}

实现runnable接口:过程

  1. 创建类并实现Runnable接口
  2. 重写Runnable接口中的run方法
  3. 创建实现了Runnable接口的子类的对象
  4. 创建Thread类的对象,也就是在创建线程
  5. 把实现了Runnable接口的子类对象作为参数传递给Thread类的构造方法

实例:

package thread;

/**

* 应用模块名称<p>

* 代码描述<p>

* Copyright: Copyright (C) 2019 XXX, Inc. All rights reserved. <p>

* Company: 河南863<p>

*

* @author 闫聪

* @since 2019/7/19 10:26

*/

public class Demo2 {

public static void main(String[] args) {

MyThreadTwo myThreadTwo = new MyThreadTwo();

Thread thread=new Thread(myThreadTwo,"窗口1");

Thread thread2=new Thread(myThreadTwo,"窗口2");

Thread thread3=new Thread(myThreadTwo,"窗口3");

Thread thread4=new Thread(myThreadTwo,"窗口4");

thread.start();

thread2.start();

thread3.start();

thread4.start();

//myThreadTwo.start();

}

}

class MyThreadTwo implements Runnable{

//方式二:成员变量属于共享资源,多个线程共享一个对象

private int num =100;

@Override

public void run() {

System.out .println ("ss"+num);

synchronized (this){

while(num>0){

num=num-1;

if(num==0){

this.notifyAll();

break;

}

System.out.println(Thread.currentThread().getName()+"...sale..."+num);

if(num<100&&num%2==0){

this.notify();

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

}

Java学习笔记——线程的更多相关文章

  1. Java学习笔记 线程池使用及详解

    有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...

  2. Java 学习笔记 线程控制

    题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...

  3. java学习笔记 - 线程池(一)

    线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销 优点:(面试题)可重复使用已有线程,避免对象创建.消亡和过度切换的性能开 ...

  4. java学习笔记 线程的实现与同步

    2019.4.2 线程实现的两种方式 继承线程,复写其中的run方法 实现runnable接口,复写run方法 使用: MyThread target = new MyThread(); new Th ...

  5. Java学习笔记--线程day01

    线程的概念:一个线程是进程的顺序执行流: 同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈.线程在切换时负荷小,因此,线程也被称为轻负荷进程.一个进程中可以有多个线程. ...

  6. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  7. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  8. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  9. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

随机推荐

  1. Selenium元素定位的几种方式

    一.通过id查找 例:<input id="kw" name="wd" class="s_ipt" value="" ...

  2. 小胖守皇宫(VIJOS P1144 )题解

    题目描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每 ...

  3. 【数论】[逆元,错排]P4071排列计数

    题目描述 求有多少种长度为n的系列A,满足以下条件: 1~n这n个数在序列中各出现一次:若第i个数a[i]的值为i,则称i是稳定的.序列恰有m个数是稳定的. 输出序列个数对1e9+7取模的结果. So ...

  4. 洛谷2320 bzoj1192 鬼谷子的钱袋

    题目链接 题意概述:把正整数n分为m个正整数,m个正整数中不允许出现复数个非1的正整数,保证所有小于n的正整数都可以用一部分正整数的和表示,并且使m尽量小. 这道题不知道为啥bzoj上没有要求输出方案 ...

  5. TCP/IP协议族基本知识

    常见的网络拓扑 两台主机通信的过程:应用进程产生消息,经由主机的 TCP/IP 协议栈发送到局域网(LAN),最后经过广域网(目前最大的广域网的因特网)中的网络设备(路由器)传给目的主机所在的局域网( ...

  6. python pycryptodome 加密解密

    pip3 install pycryptodome my_private_rsa_key.bin -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu ...

  7. OpenFOAM——在钝板上分离的层流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL063: Separated Laminar Flow Over a Blunt ...

  8. win10 关闭开机密码

    在运行对话框里输入:netplwiz 控制面板(control)>电源选项>更改计算机休眠时间-选为 从不

  9. 原创:【ajax | axios跨域简单请求+复杂请求】自定义header头Token请求Laravel5后台【亲测可用】

    如标题:我想在ajax的header头增加自定义Token进行跨域api认证并调用,api使用laravel5编写,如何实现? 首先,了解下CORS简单请求和复杂请求.  -- CORS简单请求 -- ...

  10. Default Activity Not Found解决方法

    2018年04月07日 17:22:44 Luckily_Liu 阅读数 13573更多 分类专栏: android   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上 ...