худший программист
Потоки
для того, чтобы создать поток в java необходимо создать свой класс, который наследуется от Thread и переопределить там метод run()
чтобы запустить поток, необходимо написать start()
public class HelloWorld { public static class MyThread extends Thread { @Override public void run() { System.out.println("Hello, World!"); } } public static void main(String []args) { Thread thread = new MyThread(); thread.start(); } }
Как видим, запуск задачи выполняется в методе run
, а запуск потока в методе start
. Не стоит их путать, т.к. если мы запустим метод run
напрямую, никакой новый поток не будет запущен. Именно метод start
просит JVM создать новый поток.
можно создать поток по-другому, используя Runnable
public class HelloWorld { public static void main(String []args) { Runnable task = new Runnable() { public void run() { System.out.println("Hello, World!"); } }; Thread thread = new Thread(task); thread.start(); } }
public class HelloWorld { public static void main(String []args) { Runnable task = () -> { System.out.println("Hello, World!"); }; Thread thread = new Thread(task); thread.start(); } }
Потоков так таковых не существует, два потока не работают параллельно
На самом деле java быстро переключает потоки, тем самым имитируя параллельную работу
метод sleep позволяет программе заснуть на определенное количество миллисекунд
Thread.sleep(millisec);
для использования sleep нужно обработать исключение InterruptedException
оно выбрасывается, если поток был прерван снаружи с помощью метода
thread.interrupt();
Самым простым типом ожидания является ожидание завершения другого потока
thread.join();
если какие-нибудь два потока изменяют какой-то объект, то их надо сихронизировать
Работа с файлами
InputStream - работает с байтами(ввод)
OutputStream - работает с байтами(вывод)
Reader - работает с символами(ввод)
Writer - работает с символами(вывод)
Для чтения байтов из файлов FileInputStream, для записи байтов FileOutputStream
- FileInputStream(String fileName) - конструктор, принимает путь до файла(включая сам файл)
- int read() - считывает один байт, возвращает инт
- int available() - возвращает количество непрочитанных байт
- void close() - закрывает поток, после окончания работы с ним
- FileOutputStream(String fileName) - конструктор, принимает путь до файла(включая сам файл)
- void write(int data) - метод записывает байт
- void flush() - принудительно записывает данные в файл
- void close() - закрывает поток, после окончания работы с ним
BufferedInputStream и BufferedOutputStream - обертки(decorator) для InputStream и OutputStream
принимают много данных в буфер
и потихоньку выдают его нам
Работа с API
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency>