java实现多线程有三种方式:继承Thread类,重写run方法,启动使用start;实现runnable接口,重写run方法;实现callable接口,重写call方法(可以有返回值,也可以抛出异常)


1.多线程实现文件下载   利用FileUtils.copyURLtoFile()

package threadStudy;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL; import org.apache.commons.io.FileUtils; public class WebDownload { public void download(String url,String dest) {
try {
FileUtils.copyURLToFile(new URL(url), new File(dest));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("url is error!");
}
}
}
package threadStudy;

public class ThreadDownload extends Thread{

    String url;
String dest; public ThreadDownload(String url,String dest) {
this.url = url;
this.dest = dest;
} @Override
public void run() {
new WebDownload().download(url, dest);
System.out.println(dest);
} public static void main(String[] args) {
ThreadDownload t1 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-06/EH0TSVI400AP0001NOS.jpg", "linzhiling.jpg");
ThreadDownload t2 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-06/EH0TSVI500AP0001NOS.jpg", "linzhiling2.jpg");
ThreadDownload t3 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-05/EGTO1O6800AN0001NOS.jpg", "rocket.jpg");
ThreadDownload t4 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-05/EGTLGCTO00AN0001NOS.jpg", "rocket2.jpg"); t1.start();
t2.start();
t3.start();
t4.start(); } }

模拟抢票(同步问题以后解决)

package threadStudy;

public class Tickets implements Runnable {

    /**
* 使用runnable 实现线程 有利于共享资源
*/ private int ticketNumber = 100; @Override
public void run() {
while (true) {
if (ticketNumber <= 0) {
break;
} else {
try {
Thread.sleep(100); //模拟线程同步问题
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "----->" + ticketNumber--);
}
}
} public static void main(String[] args) {
Tickets t = new Tickets();
System.out.println(Thread.currentThread().getName());
new Thread(t,"黄牛一").start();
new Thread(t,"黄牛二").start();
new Thread(t,"黄牛三").start();
}
}

java线程学习1的更多相关文章

  1. java 线程学习

    转载:详见处http://lavasoft.blog.51cto.com/62575/27069   Java多线程编程总结   下面是Java线程系列博文的一个编目:   Java线程:概念与原理 ...

  2. java线程学习——汉堡销售问题

    汉堡店中有一个负责做汉堡的厨师,一个负责销售的营业员,用java线程表示他们的营业过程: 问题原型就是生产者与消费者的问题. 首先定义一个汉堡包箱子类与几个相关的变量类: public class H ...

  3. Java线程学习详解

    线程基础 1. 线程的生命周期 1.1 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态.它保持这个状态直到程序 start() 这个线程. 1 ...

  4. Java线程学习笔记(两) 线程异常处理

    线程捕获异常: 情况下,我们在main()方法里是捕捉不到线程的异常的,比例如以下面代码: public class ExceptionThread implements Runnable{ @Ove ...

  5. Java线程学习笔记(一个)

    一个.正在创建的线程: 老掉牙的话题了.继承 java.lang.Thread父类或者实现Runnalbe接口.这里就提一句: class Thread implements Runnable Thr ...

  6. java线程学习(一)

    1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...

  7. 学习java线程学习笔记

    线程:代码执行的一个分支          主要作用是提高了效率,cpu能同时执行多个部分的代码.      线程的创建:两种方式      a.继承于thread类,重写run方法.      b. ...

  8. java线程学习之volatile关键字

    volatile变量的主要作用:是使变量在多个线程间可见. 在java中每一个线程都会有一块工作内存区,其中存放着所有线程共享的主内存的变量值的拷贝.当线程执行时,它在自己的工作内存区操作这些变量,为 ...

  9. java线程学习之synchronized关键字

    关键字synchronized的作用是实现线程间的同步.它的任务是对同步的代码加锁.一个代码块同时只能有同一个线程进行读和写操作,从而保证线程间是安全的. 线程安全的概念是:当多个线程访问某一个类(对 ...

  10. java线程学习之Sleep方法

    sleep方法是在线程中常用到的一个方法,它是一个静态方法. sleep(long millis)       在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度 ...

随机推荐

  1. HDU - 4513 吉哥系列故事――完美队形II(manacher)

    1.找出一个最长的回文子串,要求中间的值最大,然后向两侧递减. 2.判断条件改为:Ma[i+Mp[i]]==Ma[i-Mp[i]]&&Ma[i-Mp[i]]<=Ma[i-Mp[i ...

  2. python的for...in...if...语句

    Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的.下面举几个简单的例子进行说明. &g ...

  3. robotframework 随机选中下拉框中的值

    示例脚本: click element id=provinceName #点击地区 省 wait until element is enabled xpath=.//*[@id='provinceNa ...

  4. 【算法小总结】LCS问题&&HDU1243

    LCS问题,又称最长公共子序列问题,是DP中较简单的一种,今天我们就来简单讲解一下. 设s1:AEGLEGLLELGEL 设s2:LREGELGEGLEG 求两个字符串的最大公共子序列长度 输出:8 ...

  5. bzoj 4951: [Wf2017]Money for Nothing【分治】

    参考:https://blog.csdn.net/herobrine_tkj/article/details/78404426?locationNum=8&fps=1 为什么从1开始存就挂了, ...

  6. (5)css盒子模型(基础上)

    CSS 盒子模型概述 ***什么是CSS的盒子模型呢?为什么叫它是盒子?先说说我们在网页设计中常听的属性名:内容(content).边框(border).内边距(padding).外边距(margin ...

  7. .Net Core之Configuration

    ASP.NET CORE 中自动集成了应用配置,支持从以下 源 处获取配置键值对 命令行 环境变量 内存 文件配置 其中文件配置是我们最常用的方式,默认文件是.json的json格式文件,摒弃了以往. ...

  8. pip 的具体含义

    Python 2.7.9 and later (on the python2 series), and Python 3.4 and later include pip (pip3 for Pytho ...

  9. Logstash读取文本信息并写入到ES

    Logstash读取文本信息并写入到ES 前提是ELK安装没问题 进入到logstash安装目录下的bin目录(我的logstash安装目录:/usr/local/) [root@es1 bin]# ...

  10. [ZOJ1961]Let it Bead

    Description "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. ...