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. Android开发之自定义对话框

    由于系统自带的对话框不好看,于是本人就自定义了一个对话框,以后有类似的就可以直接使用啦.先上效果图: 1,布局文件dialog_clear_normal.xml <?xml version=&q ...

  2. 删除oracle数据库用户的dba权限(当出现同一用户DBA可以登录,normal不能登录)“无法对SYS拥有的对象创建触发器”

    系统报错:“无法对SYS拥有的对象创建触发器”,搞不懂是什么原因了,到底这触发器要用什么用户才能建立啊? ORA-04089: 无法对 SYS 拥有的对象创建触发器 第一种方式: 首先,用sys用户a ...

  3. HDU3092:Least common multiple(素数筛选+完全背包)

    题意 给出\(n\)和\(m\),将\(n\)拆成任意个数,求它们的最大的\(lcm\) 分析 1.可以证明\(n=p1^{s1}*p2^{s2}*...*pn^{sn}\)时\(lcm\)最大(其中 ...

  4. java jdbc 与mysql连接的基本步骤

    Java与mysql链接的基本步骤: 第一步:注册驱动 方法一: DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 方法二:设置属性 ...

  5. bzoj 3144 [Hnoi2013]切糕【最小割+dinic】

    都说了是'切'糕所以是最小割咯 建图: 每个点向下一层连容量为这个点的val的边,S向第一层连容量为inf的边,最后一层向T连容量为自身val的边,即割断这条边相当于\( f(i,j) \)选择了当前 ...

  6. 深入学习Ajax

    1.什么是Ajax? AJAX的全称是Asynchronous Javascript And XML (异步的JavaScript和XML).是一种在无需重新加载整个网页的情况下,能够更新部分网页的技 ...

  7. 查找MySQL和 SQL sever data

    MySql SQL server

  8. 【css】rem及其替换方案

    移动端的web前端开发其实经常会有一些令人头疼的问题,比如屏幕适配.1像素问题等,rem也是之前在屏幕适配上比较完善的一套方案,但是随着业务的深入,任何方案都有其优秀与不足的地方,rem这套方案也一样 ...

  9. 51nod 1100 斜率最大

    可以用三个点简单证明斜率最大的直线两个点! #include <bits/stdc++.h> #define MAXN 10010 using namespace std; struct ...

  10. hihoOffer收割练习20题目2

    题目2 : SCI表示法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示 ...