java多线程快速入门(七)】的更多相关文章

------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有多个线程  什么是线程? 线程就是独立的运行一条执行路径 一个独立的执行单元 , 一个执行流程 为什么要使用多线程? 多线程提高程序效率 , 使用多线程 , 每个线程互补影响 2.创建线程的方式有哪些 1.使用继承 Thread类方式 如下示例 结果 1.继承 Thread 类 class Crea…
什么是守护线程 守护线程是为用户线程服务的这么一个线程,主线程结束,守护线程也结束 package com.cppdy; class MyThread3 extends Thread{ @Override public void run() { System.out.println("开始执行线程"); try { sleep(1000); } catch (Exception e) { } System.out.println("结束执行线程"); } } pub…
多线程应用实例(批量发送短信) 1.创建实体类 package com.cppdy; public class UserEntity { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(Strin…
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集合,一个线程是进程中的一条执行路径 3.多线程的好处 多线程的好处就是提高程序的效率 4.多线程的应用场景 迅雷下载视频.QQ同时和多人聊天.批量发送短信,批量上传资源 5.使用继承Thread类还是使用实现Runnable接口好? 使用实现Runnable接口好,原因是接口可以实现多个,类只能继承…
线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接使用 前提:AB线程在同一个线程池里面:A线程执行完毕了,B线程进来了,就直接去替换原来A线程的run方法,执行B 使用newCachedThreadPool创建线程池 package com.cppdy; import java.util.concurrent.ExecutorService; i…
CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; import java.util.concurrent.CountDownLatch; class MyThread17 extends Thread{ private CountDownLatch countdownlatch; public MyThread17(CountDownLatch coun…
1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 package com.cppdy; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class ThreadDemo16 { public static void main(S…
Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线程执行完毕或者抛出异常的话,锁自动释放(相当于汽车中的自动挡) Condition用法 Condition的功能类似于在传统的线程技术中的Object.wait()和Object.notify()的功能 package com.cppdy; import java.util.concurrent.l…
多线程通讯实例(必须要有多个线程.必须要管理同一个变量:线程A生产一个变量,线程B消费一个变量) package com.cppdy; class User { public String username; public String sex; //如果flag为false 证明变量可写不可读 //如果flag为true 证明变量可读不可写 public boolean flag=false; } class InputThread extends Thread { private User…
使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { //volatile让多个线程刷新falg的值 public volatile boolean falg = true; @Override public void run() { System.out.println("子线程开始执行啦"); while (falg) { } System…
使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurrent.atomic.AtomicInteger; class MyThread10 extends Thread { //AtomicInteger每次只能一个线程操作count private static AtomicInteger count = new AtomicInteger(0); @…
多线程安全问题(卖火车票案例) package com.cppdy; class MyThread5 implements Runnable{ private Integer ticketCount=100; @Override public void run() { while(ticketCount>0) { try { Thread.sleep(50); } catch (Exception e) { e.printStackTrace(); } sale(); } } public vo…
常用线程api方法 多线程运行状态 1.新建状态 用new创建一个线程 2.就绪状态 当调用线程的start()方法 3.运行状态 当线程获得cpu,开始执行run方法 4.阻塞状态 线程通过调用sleep方法进入睡眠状态 线程试图得到一个锁,而该锁正被其它线程持有 线程在等待某个触发条件 5.死亡状态 run方法正常退出而自然死亡 一个未捕获的异常终止了run方法而使线程猝死…
通过匿名内部类的方法创建多线程 package com.cppdy; //通过匿名内部类的方法创建多线程 public class ThreadDemo2 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); }…
通过实现Runnable接口实现多线程 package com.cppdy; //通过实现Runnable接口实现多线程 class MyThread1 implements Runnable{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo1 { public static void…
通过继承Thread类来实行多线程 package com.cppdy; //通过继承Thread类来实行多线程 class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo { public static void main(String…
如何停止线程 1.使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了) package com.cppdy; class MyThread15 extends Thread{ @Override public synchronized void run() { while(true) { try { wait(); } catch (Exception e) { } //如果这里有非常重要的代码块,是不是就出现问题了 System.out.println("…
ThreadLocal关键字实现每个线程有自己的变量 package com.cppdy; class Number { private int num; public static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return 0; } }; public Number(int num) { th…
死锁产生的原因(必须有两个线程.必须有多个锁.锁之间必须有引用的过程) package com.cppdy; class MyThread9 implements Runnable { private Integer ticketCount = 100; private Object ob = new Object(); public boolean falg = true; @Override public void run() { if (falg) { synchronized (ob)…
在静态方法上面加synchonizd用的是字节码文件锁 package com.cppdy; class MyThread8 implements Runnable { private static Integer ticketCount = 100; public boolean falg = true; @Override public void run() { if (falg) { synchronized (MyThread8.class) { while (ticketCount >…
在方法上面加synchonizd用的是this锁 package com.cppdy; class MyThread7 implements Runnable { private Integer ticketCount = 100; public boolean falg = true; @Override public void run() { if (falg) { synchronized (this) { while (ticketCount > 0) { try { Thread.sl…
synchonizd解决安全性问题 package com.cppdy; class MyThread6 implements Runnable{ private Integer ticketCount=100; private Object ob=new Object(); @Override public void run() { while(ticketCount>0) { try { Thread.sleep(50); } catch (Exception e) { e.printSta…
设置线程优先级:join() package com.cppdy; class MyThreadA extends Thread{ MyThreadB b; public MyThreadA(MyThreadB b) { this.b=b; } @Override public void run() { try { b.join(); sleep(1000); } catch (Exception e) { } System.out.println("A子线程执行"); } } cla…
这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行. 所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务.通常由操作系统负责多个线程的调度和执行. 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线…
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲(参考<Java Web程序设计基础教程>第1章)1 JSP 和 Java的关系 一般Java指的标注版 Java SE   另外两个版本:Java EE 和 Java ME JSP属于Java EE的一部分.   Java EE:     组件:Web层组件(JSP+Servlet)+业务层组件…
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署,至于为什么要先写JSP WEB,而不是直接上SSM(Spring.SpringMVC.Mybatis),原因很简单,先得了解基础,再由浅入深,这是我的学习方法,如果一开始就写MVC,那么顶多也是照葫芦画瓢,很难深入,因为不知道原理,就无法扩展与灵活运用.好了废话不多说,开始本文的主题.…
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署 第三篇:JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC) 第四篇:JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven.SpringMVC.Spri…
接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.SpringMVC.SpringJDBC(即:SSM中的S(Spring)S(SpringMVC)),暂不涉及ORM部份(即:M(Mybatis)),Mybatis将在下一篇文章中继续给大家分享.我相信通过之前几篇文章的学习与实践,已基本熟悉了搭建JSP网站及把AOP IOC应用到项目中,已具备编写JSP 普通W…
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Servlet.Fitler.Listner等,这为后面搭建基于SSM的框架奠定了基础知识,当然光了解JSP相关的知识还不行,我们还得了解掌据Spring相关的知识,因为SSM,是基于Spring框架(SpringMVC)搭建的,好了废话不多说,直接进入主题. 什么是Spring? Spring是一个开放源代码的设…
问题中问到如何让java新生快速入门,既然想快速入门的话那最简单粗暴的方法就是多看视频,加上跟着视频敲代码,刚开始可能不知道是什么意思,敲得多了就慢慢知道是什么意思了. 刚开始建议在网上找那种结合自己大学课本的课程看,一般各种学习类网站上(比如腾讯课堂,我要自学网,网易云课堂等,都是免费观看)搜索-java基础都可以找到,边看视频边在书上画重点,然后敲代码. 基础知识学完后,可以在网上找一个小项目跟着做不会的东西再回头百度了解巩固一下,小项目的话比如坦克大战,飞机大战,五子棋,推箱子都可以尝试跟…