首先是进程和线程的区别,进程就是像打开csgo.exe就是一个进程,然后打开LOL.exe又是另外一个进程了。

而线程呢,就是在同一进程内部,发生的事情。

那么就开始了解线程!

创建多线程:

线程有三种创建方法:

1.继承Thread类的方式

public class Testthread extends Thread{public void run(){//}
}

run方法里面就是写你这个线程要做的事情。

然后:

TestThread t1=new TestThread();
t1.start();

通过.start()方法就可以开始t1这个线程啦!

2.实现Runnable的方式

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

然后:

ttt t2 = new ttt();new Thread(t2).start();

就可以开始t2这个线程啦,需要注意的同样也是要有.start()才能运行这个线程。

3.匿名类的方式

这也是我喜欢的方式,因为写起来简单hhhh

Thread t3 = new Thread() {public void run(){//}
};

同样的要注意:启动线程是start()方法,run()并不能启动一个新的线程。

常见的线程方法:

1、暂停当前线程: .sleep()

顾名思义,把当前的线程暂停一定时间,其他的线程并不会受到影响。

注意是会抛出interruptedException异常的。

2、加入到当前线程中: .join()

join的作用是当这个线程运行完事儿之后程序才继续往下走,不然会一直停在join方法处。
            使用场景:如果在某处后边的处理需要使用到t1的数据,那么可以用join来等待t1线程执行结束。

3、定义线程的优先级: .setPriority()

当线程处于竞争关系的时候,优先级高的线程会获得更多的cup资源,也就是这个线程会执行得更快

4、临时暂停: .yield

并不是直接就给它停住了,而是它自己也在慢慢运行,但是会把更多的cup资源让给其他的线程。

5、守护线程: .setDaemon(true)

守护线程的概念是: 当一个进程里,所有的线程都是守护线程的时候,结束当前进程。

就是说可以用来把一些辅助线程写成守护的,那么当干实事的线程完事了,这些守护的线程就没必要继续了。

比如写日志啊,性能统计等。

作业1、波动拳:

package Multiplethread;
/*
英雄有可以放一个技能叫做: 波动拳-a du gen。
每隔一秒钟,可以发一次,但是只能连续发3次。发完3次之后,需要充能5秒钟,充满,再继续发。借助本章节学习到的知识点,实现这个效果
*/
public class Test1_adugen {public static void main(String[] args) {Thread t1 = new Thread() {public void run() {for(int i = 0;i < 5;i ++){for(int j = 0;j < 3;j ++) {System.out.println("正在发送第"+(j+1)+"波动拳");try {Thread.sleep(1000);}catch(InterruptedException e ) {e.printStackTrace();}}System.out.println("开始为时5s的充能");try {Thread.sleep(5000);}catch(InterruptedException e ) {e.printStackTrace();}}}};t1.start();}
}

作业2:破解密码

package Multiplethread;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 1. 生成一个长度是3的随机字符串,把这个字符串当作 密码* 2. 创建一个破解线程,使用穷举法,匹配这个密码* 3. 创建一个日志线程,打印都用过哪些字符串去匹配,这个日志线程设计为守护线程* 提示: 破解线程把穷举法生成的可能密码放在一个容器中,日志线程不断的从这个容器中拿出可能密码,并打印出来。* 如果发现容器是空的,就休息1秒,如果发现不是空的,就不停的取出,并打印。*/
public class text_mima {public static void main(String[] args) {Random r = new Random();String targetstr="";List<String> l = new ArrayList<String>();for(int i = 0;i < 3;i ++)//随机目标字符串{while(true){char x = (char)r.nextInt(122);if(Character.isDigit(x) || Character.isAlphabetic(x)){targetstr+=x;break;}}}//System.out.println(targetstr);Thread t1 = new Thread() {public void run() {for(char i = '0';i <= 'z';i ++){if(Character.isDigit(i) || Character.isAlphabetic(i)){for(char j = '0';j <= 'z';j ++){if(Character.isDigit(j) || Character.isAlphabetic(j)){for(char k = '0';k <= 'z';k ++){if(Character.isDigit(k) || Character.isAlphabetic(k)){StringBuffer buf = new StringBuffer();buf.append(i);buf.append(j);buf.append(k);l.add(buf.toString());    System.out.println("产生的新密码是:"+buf.toString());}}}}}   }}};t1.start();Thread t2 = new Thread(){public void run() {while(true) {if(l.isEmpty()){try {Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}continue;}for(int i = 0;i < l.size();i ++){File f = new File("C:/Users/msi-/Desktop/mim.txt");try(FileWriter fr = new FileWriter(f,true)){fr.write(l.get(i));System.out.println("记录的密码是:"+l.get(i));}catch(IOException e){e.printStackTrace();}}}}};t2.setDaemon(true);t2.start();}
}

java学习笔记 多线程(一)创建多线程,线程常用方法相关推荐

  1. JAVA学习笔记(第十章 多线程)

    一.启动多线程 多线程即在同一时间,可以做多件事情. 创建多线程有3种方式,分别是继承线程类.实现Runnable接口.匿名类. 1.线程与进程 进程(Processor):启动一个LOL.exe就叫 ...

  2. Effect Java 学习笔记-对象的创建与销毁

    第一条.静态工厂替代构造器 1.更高的可读性,可命名. 2.可以控制对象的数量,统一入口生成,单例.对象重用 3.获取对象更加灵活,可以返回对象的所有子类 通过静态类暴露API,可以隐藏API实现类, ...

  3. Effictive Java学习笔记1:创建和销毁对象

    建议1:考虑用静态工厂方法代替构造器 理由:1)静态方法有名字啊,更容易懂和理解.构造方法重载容易让人混淆,并不是好主意 2)静态工厂方法可以不必每次调用时都创建一个新对象,而公共构造函数每次调用都会 ...

  4. 韩顺平Java学习笔记P245对象创建流程分析P246this关键字-P250

    P245对象创建流程分析 //1.先在方法区加载方法类 //2.在堆里开空间一个存放age,一个存放name //3.(先默认初始化有默认值age=0,name=null,再显示初始化age=90,n ...

  5. Java学习笔记(7)——Java基础之IO多线程网络思维导图

    Java面向对象学习笔记之:包括IO(字节流,字符流,节点流,处理流).线程(线程创建,线程控制,线程同步).网络(TCP Scoket,  UDP Scoket)(全屏观看Java学习笔记(7)-- ...

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

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

  7. Java学习笔记5-1——多线程

    目录 前言 核心概念 线程创建 继承Thread类 实现Runnable接口 上述两个方法小结 实现Callable接口 并发问题简介 静态代理模式 线程状态 线程停止(stop) 线程休眠(slee ...

  8. Java学习笔记---多线程并发

    Java学习笔记---多线程并发 (一)认识线程和进程 (二)java中实现多线程的三种手段 [1]在java中实现多线程操作有三种手段: [2]为什么更推荐使用Runnable接口? [3][补充知 ...

  9. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

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

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

最新文章

  1. 利用CH340C制作MicroPython ESP8266,ESP32的下载器-改进型
  2. 纪念逝去的头发--一次debug经历
  3. 200.Number of Islands
  4. linux 为开发板添加板级文件config.h
  5. WindowsPhone设置启动欢迎页面
  6. Test_data detection-Illumination
  7. ubutun 更换网络源_Ubuntu 14.04用户修改更新源和替换软件源的方法
  8. 卡尔曼滤波器及代码实现
  9. oracle alter命令大全
  10. 考研数学思维导图(数一、数二、数三)
  11. 三.修改Jenkins插件下载路径
  12. Keil C51详细安装教程(最新版)
  13. matlab 神经网络设计多层隐含层_MATLAB计算多层隐含层BP神经网络
  14. 百度地图绘制大量标注点卡顿问题完美解决
  15. linux下配置dnx地址,Linux上编译DNX失败
  16. Go 语言 app.conf配置文件
  17. 为什么我们不能坚持到底?
  18. esp32 micropython蓝牙 搜不到_esp 使用几次后蓝牙搜索不到问题?
  19. 优化了的过关键点的光滑曲线拟合算法
  20. 呕心沥血整理出的史上最简单的IntelliJ IDEA教程,快来看哟!

热门文章

  1. 图片技巧:3分钟教你用Photoshop CS4,让您的店招靓起来
  2. LeetCode和NewCode常见错误(持续更新)
  3. 计算机网络学习篇:TCP/IP原理体系结构
  4. 精辟!一位厉害MM对男人的极品剖析
  5. linux图片添加滤镜,分享|在 Ubuntu 中给你的照片加上 Instagram 风格的滤镜程序
  6. 几个水墨风格flash网站收集
  7. 引用 linux ioctl函数
  8. [ 常用工具篇 ] 使用 kali 实现网络钓鱼 -- setoolkit 详解实战(一)
  9. JavaScript简明教程三
  10. 一个即时通信软件QTALK